反復フィールドのコピー

いくつかの方法で、ESQL のあるノードを構成して反復フィールドをコピーすることができます。

反復構造を含む入力 XML メッセージについて考えます。

...
	<Field_top>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
	</Field_top>
.....

以下のステートメントで、この全体の構造フィールドをコピーすることはできません。

SET OutputRoot.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;

上のステートメントは、最初の反復のみをコピーします。したがって、このステートメントと同じ結果になります。

SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.Field_top.field1[1];

入力フィールドの CARDINALITY を伴う反復を制御して、ループ内のフィールドをコピーすることができます。

SET I = 1;
SET J = CARDINALITY(InputRoot.XML.Field_top.field1[]);
WHILE I <= J DO
	SET OutputRoot.XML.Output_top.Outfield1[I] = InputRoot.XML.Field_top.field1[I];
SET I = I + 1;
END WHILE;

入力フィールドからコピーするとおりに、 出力メッセージの各フィールドを変更したい場合(例えば、数を追加する、または内容を大文字に変換する)、 またはそれがコピーされた後に、これが適切な場合もあります。 出力メッセージが、入力メッセージに存在するより多くの Field1 フィールドをすでに含んでいた場合、余分のフィールドはループによって変更されず、出力メッセージ内に残ります。

以下の単一ステートメントは、入力フィールドの反復を出力フィールドにコピーし、 出力メッセージの余分のフィールドを削除します。

SET OutputRoot.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];

下記の例は、出力ツリーにエレメントをコピーする場合に、 どのようにエレメントの名前を変更できるかを示しています。 このステートメントは、ソースのエレメント名を介してはコピーしません。 したがって、各 field1 エレメントは Target エレメントになります。

SET OutputRoot.XML.Output_top.Outfield1.Target[] = 
    (SELECT I FROM InputRoot.XML.Field_top.field1[] AS I );

次の例は、同じ操作を行う異なる方法を示しています。同じ終了結果となります。

SET OutputRoot.XML.Output_top.Outfield2.Target[] = InputRoot.XML.Field_top.field1[];  

以下の例は、ソースのエレメント名を介してコピーします。 各 field1 エレメントは、 Target エレメントの下にある field1 エレメントとして保存されます。

SET OutputRoot.XML.Output_top.Outfield3.Target.[] = InputRoot.XML.Field_top.field1[];  

この例は、Target エレメントの下に作成された field1 エレメントを用いて、 同じ結果を達成する代替方法です。

SET OutputRoot.XML.Output_top.Outfield4.Target.*[] = InputRoot.XML.Field_top.field1[];

これらの例は、ESQL をコーディングしてソースからターゲットへフィールドを繰り返しコピーすることができる、いくつかの方法があることを示しています。 必要な結果を達成するために、最も適切な方法を選択します。

ここで示されているプリンシパルは、出力メッセージ・ツリーのみにではなく、 データを書き込むことができるメッセージ・ツリーのすべての領域に等しく当てはまります。

関連概念
メッセージ・フローの概要
ESQL の概要
関連タスク
メッセージ・フローの設計
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
SET ステートメント
WHILE ステートメント
CARDINALITY 関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac20420_