CREATE ステートメントは新規メッセージ・フィールドを作成します。
新しいメッセージ・フィールドは、指定した位置 (CREATE FIELD) または 既存の位置に対する相対位置 (CREATE... OF...) に配置されます。 . 新しいフィールドが作成されるのは、ターゲットのフィールド参照が、Environment、 InputLocalEnvironment、OutputLocalEnvironment、OutputRoot、 または OutputExceptionList など、変更可能なメッセージを指す場合だけです。
FIELD 文節を含める場合、ターゲットで指定されたフィールドにナビゲートされ (必要であれば、フィールドが作成される)、任意の VALUE 文節か FROM 文節が実行されます。 この形式の CREATE ステートメントでは、フィールドをまったく作成しないこともあり、 確実に行われるのは、指定したフィールドの存在を確認することだけです。
SET OutputRoot.XML.Message.Structure[2].Field = ...
Structure の少なくとも 1 つのインスタンスが、 メッセージの中にすでに存在していなければなりません。 つまり、作成されるツリー内のフィールドだけが、 ルートから、フィールド参照によって示されるフィールドへの、直接パス上にあるものです。
PREVIOUSSIBLING、NEXTSIBLING、FIRSTCHILD、または LASTCHILD 文節が存在する場合、 FIELD 文節とまったく同じ方法でターゲットで指定されたフィールドにナビゲートされます (必要であれば、 フィールドが作成されます)。 次に新しいフィールドが作成され、指定した位置に置かれます (たとえば、 PREVIOUSSIBLING または FIRSTCHILD として)。 この形式の CREATE ステートメントでは必ず、新しいフィールドが作成され、指定した位置に置かれます。
2 つの CREATE FIRSTCHILD OF ターゲット・ステートメントを使用する場合、 2 番目のステートメントでは、新しいフィールドがターゲットの最初の子として作成され、 以前に作成した最初の子がメッセージ・ツリーの右に置き換えられます (そのため、 最初の子ではなくなります)。 同様に、CREATE LASTCHILD OF ターゲットはターゲット・フィールドにナビゲートし、 新しいフィールドを右端の子として追加し、以前の最後の子を左に置き換えます。
CREATE PREVIOUSSIBLING OF ターゲットは、 ターゲットで指定したフィールドのすぐ左にフィールドを作成します (そのため、 ツリーの深さは変わりません)。 同じように、CREATE NEXTSIBLING OF ターゲットは、 ターゲットで指定したフィールドのすぐ右にフィールドを作成します。 PREVIOUSSIBLING または NEXTSIBLING の作成時に、REPEAT キーワードを使用して、 新規フィールドのタイプおよび名前を、現行フィールドからコピーできます。
AS 文節があれば、名前付き参照変数を、新規に作成されたフィールドを指すようにそれを移動します。 後ほどの処理でこの新規フィールドを含める場合もあるので、 こうしておくと役立ちます。
DOMAIN 文節がある場合、 新しいフィールドを指定したタイプの新しいパーサーに関連付けます。 この文節では、ルート・フィールド名 (たとえば、XML や MQRFH2) を指定します。 DOMAIN 文節が存在しても、指定される値がゼロ長の文字ストリングである場合、 ターゲットで指定したフィールドを所有するパーサーと同じタイプの新しいパーサーが作成されます。 指定したドメイン名が CHARACTER データ・タイプではないか、値がヌルの場合、例外が送出されます。 FIELD 文節と一緒に DOMAIN 文節は指定しないでください。 新規フィールドが作成されない可能性もあります。
VALUES 文節では、適切なデータ・タイプ (タイプでは INTEGER、名前では CHARACTER、 そして値では任意の scalar 型) を戻す任意の式で、タイプ、名前、および値 (または、 これらのサブセット) を指定できます。 タイプまたは名前に指定された値がヌルの場合には、例外が送出されます。
NAMESPACE | NAME | エレメントに付けられる名前 |
---|---|---|
いいえ | いいえ | エレメントは名前なし (名前フラグは自動的に設定されない) |
いいえ | はい | エレメントは、パスから選択されたネーム・スペースで指定された名前 |
はい | いいえ | エレメントは、指定されたネーム・スペースで指定された空の名前 |
はい | はい | エレメントは、指定されたネーム・スペースで指定された指定名 |
IDENTITY 文節は TYPE および NAME 文節の代わりに単一のパス・エレメントを取り、 フィールド参照に関する部分で説明されている規則すべてに従います (ESQL フィールド参照を参照してください)。
FROM 文節の場合、新規フィールドのタイプ、名前、および値は、 SourceFieldReference によって指し示したフィールドから取られます。 既存の子フィールドは切り離され (ただし、FIELD 文節の場合は、 フィールドがすでに存在している場合もあります)、次いで新しいフィールドに、 ソース・フィールドの子フィールド (および孫など) のコピーが渡されます。
PARSE 文節がある場合、提供されたビット・ストリームから新たに作成されたフィールドの 下にサブツリーが作成されます。 このことを実行するアルゴリズムは、パーサーごとに、指定されたオプションごとに異なります。 すべてのパーサーはモード RootBitStream をサポートしていますが、 このモードのツリー作成アルゴリズムは入力ノードが使用するものと同じです。
パーサーの中には 2 番目のモード FolderBitStream をサポートしているものもあり、 このモードは、同じモードを使用して ASBITSTREAM 関数 (ASBITSTREAM 関数を参照) によって作成されたビット・ストリームからサブツリーを生成します。
ステートメントが処理されると、すべての PARSE 文節式が評価されます。 次の式のいずれかが適切なタイプのヌル以外の値を結果として渡さないと、例外が出されます。
文節 | タイプ | デフォルト値 |
---|---|---|
Options | 整数 | RootBitStream & ValidateNone |
Encoding | 整数 | 0 |
Ccsid | 整数 | 0 |
Message set | 文字 | ゼロ長ストリング |
Message type | 文字 | ゼロ長ストリング |
Message format | 文字 | ゼロ長ストリング |
OPTIONS 文節は、整数タイプの値を戻す式をすべて受け入れます。 この文節は、与えられた定数のリストにあるオプション値を生成する場合にのみ有効です (なお、 複数のオプションが必要な場合は、BITOR 関数を使用します)。
パーサー・モード・オプション... FolderBitStream RootBitStream 妥当性検査マスター・オプション... ValidateValue -- ValidateContent と一緒に使用できる ValidateContent -- ValidateValue と一緒に使用できる ValidateNone 妥当性検査障害アクション・オプション... ValidateException ValidateLocalError ValidateUserTrace 妥当性検査タイミング・オプション... ValidateComplete ValidateImmediate ValidateDeferred 妥当性検査の値制約オプション... ValidateFullConstraints ValidateBasicConstraints 妥当性検査の修正オプション... ValidateFullFixUp ValidateNoFixUp
各グループから 1 つのオプションだけが指定できます。 ValidateValue と ValidateContent は例外で、 内容と値の妥当性検査を入手するために一緒に使用できます。 グループ内のオプションを指定しないと、太字のオプションが使用されます。
MQENC_INTEGER_NORMAL MQENC_INTEGER_REVERSED MQENC_DECIMAL_NORMAL MQENC_DECIMAL_REVERSED MQENC_FLOAT_IEEE_NORMAL MQENC_FLOAT_IEEE_REVERSED MQENC_FLOAT_S390
CCSID 文節に使用される値は、通常の番号付けの方式に従います。 たとえば、1200 = UCS-2、1208 = utf-8のようになります。
文節が指定されていない場合、所定のデフォルト値が使用されます。 また、CCSID や Encoding のデフォルト値も、 キュー・マネージャーの Encoding や CCSID の設定から取られた値なので、そのまま使用することをお勧めします。
同様に、Message Set、Message Type、および Message Format の各オプションについても、 多くのパーサーがメッセージ・セット、メッセージ・タイプ、 およびメッセージ形式の情報を必要としない (したがって、 有効な値であれば何でもよい) ため、それぞれのデフォルト値を使用すると便利です。
ENCODING -> CCSID -> SET -> TYPE -> FORMAT -> OPTIONS
リストはどこで切り捨ててもよく、値を提供しない文節にはまったく空の式を使用することもできます。
CREATE FIELD OutputRoot.XML.Data;次の例は、名前、タイプ、または値を指定しないで、 ref1 の最初の子としてフィールドを作成する場合です。
CREATE FIRSTCHILD OF ref1;次の例は、指定したタイプ、名前、および値のフィールドを作成します。
CREATE NEXTSIBLING OF ref1 TYPE NameValue NAME 'Price' VALUE 92.3;次の例では、タイプと名前を指定し、値は指定しないでフィールドを作成します。 そのフィールドは、動的参照 (ref1) の指す兄弟の前に追加されます。
CREATE PREVIOUSSIBLING OF ref1 TYPE Name NAME 'Quantity';
CREATE FIRSTCHILD OF targetCursor AS targetCursor NAME 'Component';次の例は、参照変数 targetCursor によって示されるフィールドの右方兄弟として、 そのフィールドと同じタイプおよび名前を持つ新規フィールドを作成します。 その後、ステートメントは新規フィールドを指すように targetCursor を移動させます。
CREATE NEXTSIBLING OF targetCursor AS targetCursor REPEAT;
次の例は、PARSE 文節の使用法を示しています。
DECLARE bodyBlob BLOB; SET bodyBlob = BITSTREAM( InputRoot.XML ); DECLARE creationPtr REFERENCE TO OutputRoot.XML; CREATE FIRSTCHILD OF creationPtr PARSE(bodyBlob,InputProperties.Encoding,437) ;
この例では、サンプル ESQL と入力メッセージが示されています。 この例の最後に出力メッセージが生成されます。
ESQL: /* copy headers */ DECLARE i INTEGER; DECLARE numHeaders INT; SET i = 1; SET numHeaders = CARDINALITY(InputRoot.*[]); WHILE i < numHeaders DO SET OutputRoot.*[i] = InputRoot.*[i]; SET i = i + 1; END WHILE; CREATE FIELD OutputRoot.XML.TestCase.description TYPE NameValue VALUE 'This is my TestCase' ; CREATE FIRSTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Identifier' VALUE InputRoot.XML.TestCase.Identifier; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Sport' VALUE InputRoot.XML.TestCase.Sport; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Date' VALUE InputRoot.XML.TestCase.Date; CREATE LASTCHILD OF OutputRoot.XML.TestCase Domain('XML') NAME 'Type' VALUE InputRoot.XML.TestCase.Type; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Number TYPE NameValue VALUE 'Premiership'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Number TYPE NameValue VALUE '1' ; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Home NAME 'Team' VALUE 'Liverpool' ; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Home NAME 'Score' VALUE '4'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[1].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Away NAME 'Team' VALUE 'Everton';
CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[1].Away NAME 'Score' VALUE '0'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Number TYPE NameValue VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Home NAME 'Team' VALUE 'Manchester United'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Home NAME 'Score' VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[1].Result[2].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Away NAME 'Team' VALUE 'Arsenal'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[1].Result[2].Away NAME 'Score' VALUE '3'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Number TYPE NameValue VALUE '2'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Number TYPE NameValue VALUE '1'; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Home TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Home NAME 'Team' VALUE 'Port Vale'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Home NAME 'Score' VALUE '9' ; CREATE FIELD OutputRoot.XML.TestCase.Division[2].Result[1].Away TYPE Name; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Away NAME 'Team' VALUE 'Brentford'; CREATE LASTCHILD OF OutputRoot.XML.TestCase.Division[2].Result[1].Away NAME 'Score' VALUE '5';
Input Message: <TestCase description="This is my TestCase"> <Identifier>ES03B305_T1</Identifier> <Sport>Football</Sport> <Date>01/02/2000</Date> <Type>LEAGUE</Type> </TestCase> Output Message: <TestCase description="This is my TestCase"> <Identifier>ES03B305_T1</Identifier> <Sport>Football</Sport> <Date>01/02/2000</Date> <Type>LEAGUE</Type> <Division Number="Premiership"> <Result Number="1"> <Home> <Team>Liverpool</Team> <Score>4</Score> </Home> <Away> <Team>Everton</Team> <Score>0</Score> </Away> </Result> <Result Number="2"> <Home> <Team>Manchester United</Team> <Score>2</Score> </Home> <Away> <Team>Arsenal</Team> <Score>3</Score> </Away> </Result> </Division> <Division Number="2"> <Result Number="1"> <Home> <Team>Port Vale</Team> <Score>9</Score> </Home> <Away> <Team>Brentford</Team> <Score>5</Score> </Away> </Result> <Result Number="2"> <Home> <Team>Reading</Team> <Score>6</Score> </Home> <Away> <Team>Stoke City</Team> <Score>7</Score> </Away> </Result> </Division> </TestCase>
注意 |
商標 |
ダウンロード |
ライブラリー |
技術サポート |
フィードバック
![]() ![]() |
ak04950_ |