SET ステートメント

SET ステートメントは、sourceexpression を評価し、 target で識別されるエンティティーに結果値を割り当てます。

構文

このターゲットについては、宣言済みの変数か、変更可能なメッセージ・ツリーのフィールド (たとえば、Environment、 InputLocalEnvironment、OutputLocalEnvironment、OutputRoot、または OutputExceptionList) とすることができます。

ターゲットが宣言済み変数である場合、 TYPE、NAME、NAMESPACE、および VALUE 文節を省略してください。 ソース式は、変数の宣言済みデータ・タイプと同じか、 またはそれに変換可能なタイプのスカラー値を戻さなければなりません。 ヌル値は、その他の値とまったく同じ方法で扱われます。

ターゲットがフィールドである場合、そこへナビゲートされ (必要であれば、フィールドを作成し)、 一連の規則に従って値が設定されます。 この規則は、TYPE、NAME、または VALUE 文節が存在するかどうか、 そしてソース式によって戻されるデータ・タイプに応じて異なります。

フィールド参照の中で配列指数が使用されたときは、 特定フィールドの 1 つのインスタンスだけを作成できます。 SET ステートメントを書く場合は、次のように書き始めます。
SET OutputRoot.XML.Message.Structure[2].Field = ...
Structure の少なくとも 1 つのインスタンスが、 メッセージの中にすでに存在していなければなりません。 つまり、作成されるツリー内のフィールドだけが、 ルートから、フィールド参照によって示されるフィールドへの、直接パス上にあるものです。

TYPE 文節が存在する場合、 ターゲット・フィールドのタイプは、sourceexpression によって戻されるタイプに変更されます。 結果がスカラーでない、タイプ INTEGER ではない、またはヌルである場合、例外が送出されます。

NAMESPACE 文節がある場合は、エレメントのネーム・スペースが設定されます。 エレメントのネーム・スペースを設定すると、自動的にその NAME フラグが設定されます。

NAME 文節が存在する場合、 ターゲット・フィールドの名前は、sourceexpression によって戻されるタイプに変更されます。 結果がスカラーでない、タイプ CHARACTER ではない、またはヌルである場合、例外が送出されます。

VALUE 文節が存在する場合、 ターゲット・フィールドの値は、sourceexpression によって戻されるタイプに変更されます。 結果がスカラーでない場合、例外が送出されます。

TYPE、NAME、または VALUE 文節を使用しない場合 (最も一般的なケース)、その動作は、 以下のように、sourceexpression をスカラーとして評価するかどうか、フィールド参照、 または (さまざまな種類の) リストに応じて異なります。
  • sourceexpression がスカラーの場合、 ターゲット・フィールドの値は、sourceexpression によって戻されるタイプに変更されます。 例外として、結果がヌルであれば、ターゲット・フィールドは切り離されます。
  • sourceexpression がフィールド参照であれば、ターゲット・フィールドの値はソース・フィールドから取られ、 子フィールドがあれば切り離され、新しいフィールドに、ソース・フィールドの子フィールド (および、 孫など) のコピーが渡されます。 sourceexpression によって示されるフィールドが存在しない場合、 ターゲット・フィールドは切り離されます。
  • sourceexpression がリストである場合、子フィールドがあれば切り離され、 リストのタイプと内容に従って、新しい一連の子フィールドが追加されます。
SET ステートメントは、 オリジナルのメッセージの中のフィールドを変更したり新しいフィールドを追加したりして、 メッセージを変更する Compute ノードで特に便利です。 SET ステートメントは、Environment ツリーまたは Local Environment ツリーにおいて、 宣言済みの変数またはフィールドを設定する場合に、Filter および Database ノードでも有用です。 このようなステートメントは、メッセージを変更する Compute ノードで使用できます。
SET OutputRoot = InputRoot;
SET OutputRoot.XML.Order.Name = UPPER(InputRoot.XML.Order.Name);

この例では、メッセージの中の 1 つのフィールドを英大文字にしています。 1 番目のステートメントで、入力メッセージの完全コピーである出力メッセージを構成します。 2 番目のステートメントで、Order.Name フィールドの値を、 右辺の式で定義された新規の値に設定します。

オリジナルの入力メッセージに Order.Name フィールドがなかった場合、 それは 1 番目のステートメントで生成される出力メッセージに存在しません。 2 番目のステートメントの右辺の式は、ヌルを戻します (UPPER 関数呼び出しで 参照されるフィールドが存在しないため)。 フィールドにヌル値を代入すると、 フィールドがすでに存在している場合は、そのフィールドを削除することになります。 したがって、結果として、2 番目のステートメントには何の作用もないことになります。

フィールドを削除せずにそれにヌル値を割り当てたい場合は、次のようなステートメントを使用します。
SET OutputRoot.XML.Order.Name VALUE = NULL;

関連概念
ESQL

関連タスク
ESQL の開発
メッセージ本文のエレメントへのアクセス

関連資料
構文の設定
ESQL のステートメント