EVAL 関数は文字値をパラメーターとし、その値を、値を戻す ESQL 式として解釈します。
EVAL ステートメントについての詳細は、EVAL ステートメントを参照してください。
EVAL は、式の形式のパラメーターを 1 つ必要とし、その式を評価して、結果値を文字ストリングにキャストします (既にそうなっているのでない限り)。 そのため、EVAL に渡される式は、文字ストリングで表せるものでなければなりません。
ユーザー定義の関数は EVAL 関数内で定義できませんが、EVAL を使用して、EVAL 関数が使用されている範囲にあるユーザー定義関数を呼び出すことができます。
IF (FALSE) THEN CALL function(<parameters>) INTO Environment.temp; END IF;
前の例では、function() を、問題の関数の名前に置き換える必要があることに注意してください。次の例では、A と B は整数スカラー変数で、scalarVar1 と OperatorAsString は文字ストリング・スカラー変数です。
式 A+B は整数値を戻しますが、整数値は文字ストリングとして表すことができるため、受け入れられます。必要なキャストは、EVAL が続けて第 2 段階の評価を行う前に実行されます。
最終のストリング・リテラルの最後にあるセミコロンは必要です。それは、EVAL が ESQL ステートメントの代わりに使われている場合は、その最初の段階の評価では、終端のセミコロンを含めて、有効な ESQL ステートメントを表すストリングを戻す必要があるためです。
EVAL の真の能力は、それを使用して ESQL のステートメントや式を動的に構成できることです。 例えば 2 番目と 3 番目の上記の例では、scalarVar1 または operatorAsString の値は、送られてくるメッセージ・フィールドの値、または他の動的な値に応じて設定され、長くなることがある IF-THEN の反復を必要とせずに、ESQL に実行させることを有効に制御することができます。
ただし、EVAL を使った場合のパフォーマンスへの影響を考慮してください。 動的構成およびステートメントや式の実行は、構成済みのものを単純に実行する場合よりも必然的に時間を要します。 パフォーマンスが非常に重要である場合は、より特定化した高速の ESQL を書くことが望ましいでしょう。
この例では、EVAL が、式ではなくフィールド参照を置き換えるために使われています。
この例では、EVAL に渡される (SELECT T.x FROM Database.y) は、文字ストリングとして表せないリストを戻します。
SET OutputRoot.XMLNS.Data.Result[]
= EVAL('(SELECT T.x FROM Database.y AS T)');