次のような形式の XML 入力メッセージがあるとします。
<MRM>
<inner>abcde fghij 12345</inner>
</MRM>
ここで、inner エレメントのタイプは
xsd:list であるため、1 つではなく 3 つのストリング値が関連付けられています。
次に示すように、各値が反復エレメントの 1 つのインスタンスに関連付けられる形式で 3 つの値を出力メッセージにコピーする場合、
<MRM>
<str1>abcde</str1>
<str1>fghij</str1>
<str1>12345</str1>
</MRM>
以下のような ESQL 構文は適切に作動すると期待するかもしれません。
DECLARE D INTEGER;
SET D = CARDINALITY(InputBody.str1.*[]);
DECLARE M INTEGER 1;
WHILE M <= D DO
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
SET M = M + 1;
END WHILE;
しかし、次のステートメントの場合、
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
ソースからターゲットへのツリー・コピーが要求されます。ターゲット・エレメントがまだ存在しないため、ステートメントはそれを作成し、その値とタイプはソースから設定されます。
したがって、タイプが
xsd:list である入力エレメントが与えられている場合に、必要なフォーマットを持つ出力メッセージを作成するには、
FIELDVALUE 関数を使用して、ソース・エレメントの値だけを明示的に取り出してください。
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);