このトピックでは、ESQL フィールド参照について説明します。
[<] および [>] を使用することもできます。 < および > を使用した例を、以下の図に示します。
以前のバージョンとの互換性のために、LAST キーワードは引き続きサポートされていますが、 使用は推奨されていません。LAST は索引式の一部としては使用できないため、 [LAST] は有効で、[<] と同等ですが、 [LAST3] は無効です。
Field [ > ] -- The first element, equivalent to [ 1 ] Field [ > (a + b) * 2 ] Field [ < ] -- The last element, equivalent to [ LAST ] Field [ < 1 ] -- The last element, equivalent to [ LAST ] Field [ < 2 ] -- The last but one element Field [ < (a + b) / 3 ]
フィールド参照は、相関名、 およびその後に続くピリオド (.) で区切られたパス・エレメント (なくてもよい) から成っています。 . 相関名は、メッセージ・ツリー内の既知の開始点を示します。 したがって開始点は、宣言済みの参照変数か、 または事前定義済みの開始点の 1 つ (InputRoot など) のいずれかでなければなりません。 パス・エレメントは、開始点から希望のフィールドまでのパスを定義します。
InputRoot.XML.Data.Invoiceブローカーは InputRoot というロケーション (つまり、 Compute ノードへの入力メッセージのルート) から開始し、 ナビゲーションのシーケンスを実行します。 まず最初に、それはルートから最初の子フィールド「XML」までナビゲートし、 その後「XML」フィールドの最初の子フィールド「Data」までナビゲートします。 最後に、ブローカーは「Data」フィールドの最初の子フィールド「Invoice」までナビゲートします。 ESQL プログラム内でこのフィールド参照が生じた場合は常に、 送り状 (invoice) フィールドにアクセスします。
InputRoot.XML."Customer Data".Invoice引用符を含むフィールドを参照する必要がある場合は、 参照の前後に 2 組の引用符を使用します。 以下に例を示します。
Body.Message."""hello"""
一部の ID はキーワードとして予約されていますが、これらの ID を二重引用符で囲んで、 キーワードとして解釈してはならないことを示すことができます。 たとえば、SET はキーワードです。 SET という名前のフィールドを含むメッセージがあり、 これ参照する場合は、Body."SET" とコーディングします。キーワードでは大文字小文字が区別されないので、SET、Set、および大文字小文字の他のすべての組み合わせは、キーワードとして認識されます。
Invoice メッセージ内のエレメント Item は、この例の 1 つです。 Item は予約済みキーワードなので、このエレメントを参照する場合は、二重引用符で囲む必要があります。 以下に例を示します。
InputBody.Invoice.Purchases."Item"[1].Author
InputRoot.XML."Customer Data".{'Customer-' || CurrentCustomer}.Invoiceこの例では、文字リテラル Customer- を CurrentCustomer (これは、 タイプ文字の宣言済み変数でなければならない) 内の値と連結することによって形成される名前を 持つフォルダーに、送り状が含まれています。
ESQL では、二重引用符で囲めば ID となります。 また、単一引用符で囲めば、文字リテラルとなります。 すべての文字ストリング (CHARACTER、BLOB、または BIT) を単一引用符で囲む必要があります。
ネーム・スペースは、この名前を含むネーム・スペース・パス内では そのネーム・スペースだけになるようにされます。ネーム・スペースが パス内で 1 つだけの場合は、ターゲットなしネーム・スペースです。
これらの形式すべては、変更前からありました。それらの形式が 名前とネーム・スペースを比較するようになったという点では振る舞いに変更がありますが、 すべての既存の変換はターゲットなしネーム・スペースにエレメントを作成するので、 既存の変換に関しては動作に変更は見受けられません。
上記の例すべてにおいて、中括弧 ({}) で囲まれた式で 与えられた名前またはネーム・スペースは、ID として与えられた名前と等価です。
その名が示すように、ターゲットなしネーム・スペースの名前は空ストリングです。 空ストリングとして評価される式、つまり空 ID ""、または 空ストリングとして定義されたネーム・スペース定数への参照によって選択できます。
フィールド参照を使用することは、普通既存エレメントの検索という意味でもあります。 このことは、SET ステートメントのターゲット、 および SELECT ステートメントの AS 文節のターゲットであるフィールド参照にあてはまります。 必要なエレメントが存在しない場合は、作成されます。
タイプ指定がない場合、エレメントのタイプは Name または NameValue (これらは事実上、新規エレメントには名前がないことを示す) にはなりません。
.そのデフォルトはエレメント名や列名から導出されたものであるか、 または単純に製造順序名である場合もあります。名前がエレメント名であれば、 これは実際にはツリー・コピーであり、ネーム・スペース名は上記のようにコピーされます。
それ以外の場合は、新規作成されたエレメントのネーム・スペースは パスを検索することによって導出されます。 つまり、名前がフィールド参照の NameId 構文であるかのように扱われます。
InputRoot.XML.Data[1].Invoice InputRoot.XML.Data.Invoice[1]この構成は、索引変数で最も一般的に使用されるもので、 ループは該当するすべてのフィールドを順番に処理します。 以下に例を示します。
WHILE count < 32 DO SET TOTAL = TOTAL + InputRoot.XML.Data.Invoice[count].Amount; END WHILE;この種の構成を使用するときには注意が必要です。 なぜなら、ループを回すたびに、ブローカーは最初からフィールドをカウントしなければならないことを意味するからです。 繰り返し数える負荷が大きければ、パフォーマンスが低下します。 そのような場合には、代わりにフィールド参照変数を使用したほうがよいでしょう。
InputRoot.XML.Data.Invoice -- Selects the first InputRoot.XML.Data.Invoice[1] -- Selects the first InputRoot.XML.Data.Invoice[>] -- Selects the first InputRoot.XML.Data.Invoice[>1] -- Selects the first InputRoot.XML.Data.Invoice[>2] -- Selects the second InputRoot.XML.Data.Invoice[<] -- Selects the fourth InputRoot.XML.Data.Invoice[<1] -- Selects the fourth InputRoot.XML.Data.Invoice[<2] -- Selects the third InputRoot.XML.Data.Invoice[<3] -- Selects the second索引文節はまた、中が空の大括弧 ( [ ] ) にすることもできます。 名前が一致するすべてのフィールドを選択します。 この構成は、リストを作成する関数 (たとえば SELECT や CARDINALITY) で使用されます。
フィールド参照のそれぞれのエレメントには、タイプ文節を含めることができます。 タイプ文節は、小括弧 ( ( ) ) によって示され、 ヌル以外のタイプ整数を戻す式を入れることができます。タイプ式がある場合には、 選択されるフィールドは、タイプが一致するものだけに制限されます。 この構成は、最も一般的には汎用 XML とともに使用されます。 汎用 XML では、多数のエレメント・タイプがあり、1 つの XML エレメントが、 属性および同じ名前のさらに別の XML エレメントの両方を含むこともあります。
<Item Value = '1234' > <Value>5678</Value> </Item>この例では、XML エレメント "Item" には、どちらも "Value" という 2 つの子エレメントがあります。 子エレメントはタイプ文節を使うことによって区別できます。属性を選択するには Item.(XML.Attribute)Value を使用し、 エレメントを選択するには Item.(XML.Element)Value を使用します。
関連概念
ESQL
注意 |
商標 |
ダウンロード |
ライブラリー |
技術サポート |
フィードバック
![]() ![]() |
ak04861_ |