SET ステートメント

SET ステートメントは、変数に値を割り当てます。

構文

概要

TargetFieldReference は、割り当てのターゲットを識別します。ターゲットは以下のいずれかになります。
  • 宣言済みのスカラー変数
  • 宣言済みの行変数
  • 事前定義済みの行変数の 1 つ (InputRoot など)
  • いずれかの種類の行変数中のフィールド (つまり、サブツリーまたは概念行)
  • いずれかの種類の行変数中のフィールドのリスト (つまり、概念リスト)
  • 上記のいずれかを指す宣言済みの参照変数
いずれかの種類のデータベース・エンティティーをターゲットにすることはできません。

SourceExpression は、割り当てられる値を提供する式です。式はどんな種類でもよく、スカラー、行、またはリストの値を戻すことができます。

スカラー変数への割り当て

ターゲットが宣言済みのスカラー変数である場合、SourceExpression は評価され、変数に割り当てられます。必要があれば、値は変数のデータ・タイプに変換されます。この変換を行えない場合は、デプロイ時にエラーになるか、実行時に例外になります。

ヌル値は、その他の値とまったく同じ方法で扱われます。つまり、式がヌルに評価すると、値 "null" が変数に割り当てられます。

スカラー変数の場合、TYPE、NAME、NAMESPACE、および VALUE 文節は意味がなく、使用できません。

行、リスト、およびフィールドへの割り当て

ターゲットが宣言済みの行変数、事前定義済みの行変数の 1 つ、いずれかの種類の行変数中のフィールド、いずれかの種類の行変数中のフィールドのリスト、またはこれらのいずれかを指す宣言済みの参照変数である場合、最終的なターゲットはフィールドになります。これらの場合、ターゲット・フィールドにナビゲートされます (必要な場合はフィールドを作成します)。

TargetFieldReference で配列指標が使用されている場合、ターゲット・フィールドにナビゲートすると、ルートからターゲット・フィールドへの直接パス上のみにフィールドを作成できます。例えば、以下の SET ステートメントでは、Structure の 1 つ以上のインスタンスがメッセージ中に既存である必要があります。

SET OutputRoot.XML.Message.Structure[2].Field = ...
ターゲット・フィールドの値は、以下の条件に基づいて、一連の規則に従って設定されます。
  1. TYPE、NAME、NAMESPACE、および VALUE 文節の有無
  2. ソース式によって戻されるデータ・タイプ
  1. TYPE、NAME、NAMESPACE、または VALUE 文節がない場合 (最も一般的なケース)、その結果は、以下のように、SourceExpression をスカラー、行、またはリストのいずれに評価するかに応じて異なります。
    • SourceExpression がスカラーに評価される場合、ターゲット・フィールドの値は、SourceExpression によって戻される値に設定されます。ただし結果がヌルの場合は、ターゲット・フィールドは廃棄されます。フィールドの新しい値は、以前の値とデータ・タイプが異なる可能性があることに注意してください。
    • SourceExpression が行に評価されると、以下のようになります。
      1. ターゲット・フィールドが識別されます。
      2. ターゲット・フィールドの値が設定されます。
      3. ターゲット・フィールドの子フィールドは、リストの構造と内容によって指示される新しい設定に置き換えられます。
    • SourceExpression がリストに評価されると、以下のようになります。
      1. ターゲット・ツリー中のターゲット・フィールドのセットが識別されます。
      2. ターゲット・フィールドが少なすぎる場合はさらに作成されます。多すぎる場合、余分のフィールドは除去されます。
      3. ターゲット・フィールドの値が設定されます。
      4. ターゲット・フィールドの子フィールドは、リストの構造と内容によって指示される新しい設定に置き換えられます。

      list タイプのエレメントの処理について、詳しくは、xsd::list タイプのエレメントの処理を参照してください。

  2. TYPE 文節が存在する場合、ターゲット・フィールドのタイプは、SourceExpression によって戻される値に設定されます。戻り値がスカラーでない、タイプ INTEGER ではない、またはヌルである場合、例外がスローされます。
  3. NAMESPACE 文節が存在する場合、ターゲット・フィールドのネーム・スペースは、SourceExpression によって戻される値に設定されます。戻り値がスカラーでない、タイプ CHARACTER ではない、またはヌルである場合、例外がスローされます。
  4. NAME 文節が存在する場合、ターゲット・フィールドの名前は、SourceExpression によって戻される値に設定されます。戻り値がスカラーでない、タイプ CHARACTER ではない、またはヌルである場合、例外がスローされます。
  5. VALUE 文節が存在する場合、ターゲット・フィールドの値は、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 のステートメント
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak05140_