RETURN ステートメントは、処理を終了します。次に何が起きるかは、RETURN ステートメントが発行されるプログラミングのコンテキストに応じて異なります。
関数で使用する場合、RETURN ステートメントはその関数の処理を停止し、呼び出し元の式に制御を戻します。 expression (必ず存在しなければならない) は評価され、関数の戻り値となります。関数がステートメントのリストを発行して戻るのは、エラーです。戻り値のデータ・タイプは、関数の宣言にあるものと同一でなければなりません。
プロシージャーで使用する場合、RETURN ステートメントはそのプロシージャーの処理を停止し、CALL ステートメントの呼び出しに制御を戻します。プロシージャーで使用される RETURN ステートメントには、expression があってはいけません。
Filter、Compute、または Database ノードのメインライン・コードで使用する場合、RETURN ステートメントは、ノードの ESQL の処理を停止させ、制御を次のノードに渡します。これらの場合に、expression が存在するならば、それは BOOLEAN 値に評価しなければなりません。expression が存在しない場合には、Filter ノードは UNKNOWN 値を想定し、その不明ターミナルに伝搬します。Compute および Database ノードはそれらの OUT ターミナルに伝搬します。
戻り値 | 結果 | |
Compute ノード: | ||
RETURN | TRUE | メッセージを out ターミナルに伝搬する。 |
FALSE | 伝搬を行わない。 | |
UNKNOWN | 伝搬を行わない。 | |
RETURN; | メッセージを out ターミナルに伝搬する。 | |
Filter ノード: | ||
RETURN | TRUE | メッセージを true ターミナルに伝搬する。 |
FALSE | メッセージを false ターミナルに伝搬する。 | |
UNKNOWN | メッセージを unknown ターミナルに伝搬する。 | |
RETURN; | メッセージを unknown ターミナルに伝搬する。 | |
Database ノード: | ||
RETURN | TRUE | メッセージを out ターミナルに伝搬する。 |
FALSE | 伝搬を行わない。 | |
UNKNOWN | 伝搬を行わない。 | |
RETURN; | メッセージを out ターミナルに伝搬する。 |
-- Declare variables -- DECLARE a INT; DECLARE PriceTotal FLOAT; DECLARE NumItems INT; -- Initialize values -- SET a = 1; SET NumItems = 0; SET PriceTotal = 0.0; -- Calculate value of order, however if this is a bulk purchase, the -- -- order will need to be handled differently (discount given) so return TRUE -- -- or FALSE depending on the size of the order -- WHILE a <= CARDINALITY(Invoice.Purchases.Item[a] DO SET NumItems = NumItems + Invoice.Purchases.Item[a].Quantity; SET PriceTotal = PriceTotal + Invoice.Purchases.Item[a].UnitPrice; SET a = a + 1; END; RETURN PriceTotal/NumItems > 42;品目の平均価格が 42 より大きいなら、TRUE が戻されます。それ以外の場合、FALSE が戻されます。Filter ノードにおいて、高価な品目を記述するメッセージが、そうでない品目を記述するメッセージとは異なるパスに従うようにすることができます。
Compute ノードでの処理の終了時に暗黙の伝搬が行われないようにする RETURN FALSE の例については、PROPAGATE ステートメントを参照してください。