フィールド参照は、相関名、およびその後に続くピリオド (.) で区切られたパス・フィールド (なくてもよい) から成っています。相関名は既知の開始点を示すので、定数、宣言済みの変数 (スカラー、行、または参照)、または事前定義済みの開始点の 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 もありますが、相関名は例外で、二重引用符を使用せずにフィールド参照を使用できます。
InputRoot.XML."Customer Data".{'Customer-' || CurrentCustomer}.Invoiceこの例では、文字リテラル Customer- を CurrentCustomer (この例では、これはタイプ文字の宣言済み変数でなければならない) 内の値と連結することによって形成される名前を持つフォルダーに、送り状が含まれています。
パス・エレメント内でアスタリスク (*) ワイルドカード文字を使用すれば、どんな名前にもマッチさせることができます。また、名前の一部分を指定するために "*" を使用することもできます。例えば、Prefix* は、"Prefix" で始まるすべての名前にマッチします。
ESQL では、二重引用符で囲めば ID となることに注意してください。また、単一引用符で囲めば、文字リテラルとなります。すべての文字ストリングを単一引用符で囲む必要があります。
InputRoot.XML.Data[1].Invoice InputRoot.XML.Data.Invoice[1]この構成は、索引変数で最も一般的に使用されるもので、ループは該当するすべてのフィールドを順番に処理します。 以下に例を示します。
WHILE count < 32 DO SET TOTAL = TOTAL + InputRoot.XML.Data.Invoice[count].Amount; SET COUNT = COUNT + 1 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、SINGULAR、および EXISTS 関数や SET ステートメント) と共に使用してください。
フィールド参照のそれぞれのフィールドには、タイプ文節を含めることができます。タイプ文節は、小括弧 ( ( ) ) によって示され、ヌル以外のタイプ整数を戻す式を入れることができます。タイプ式がある場合には、選択されるフィールドは、タイプが一致するものだけに制限されます。この構成は、最も一般的には汎用 XML とともに使用されます。汎用 XML では、多数のフィールド・タイプがあり、1 つの XML フィールドが、属性および同じ名前のさらに別の XML フィールドの両方を含むこともあります。
<Item Value = '1234' > <Value>5678</Value> </Item>
この例では、XML フィールド Item には、どちらも "Value" という 2 つの子フィールドがあります。子フィールドはタイプ文節を使うことによって区別できます。属性を選択するには Item.(<Domain>.Attribute)Value を使用し、フィールドを選択するには Item.(XML.Element)Value を使用します (<Domain> は XML、XMLNS、または XMLNSC のいずれかで、ソースのメッセージ・ドメインによって判別される)。
通常はタイプ制約によって、(FIELDVALUE 関数と同様の方法で) 参照のスカラー値が抽出され、参照のタイプが正しくない場合は例外がスローされます。定義によると、存在しないフィールドはすべて NULL に評価されるので、例外がスローされます。これは、メッセージに重要なフィールドが欠落している場合に例外をスローするのに便利で早い方法です。
しかし、データベースに渡す候補の式でタイプ制約が生じた場合 (式が WHERE 文節中にある場合など) は、その情報を使用して、式をデータベースに渡せるかどうかが判別されます。このことは、データベース表の列に対して操作を行う CAST が WHERE 文節に含まれている場合に重要になることがあります。タイプ制約がない場合、この種の式をデータベースに渡せません。なぜなら、データベースが必要な変換を実行できるかどうかブローカーが識別できないからです。しかし、データ変換機能が非常に限定されているデータベースもあるので、列値に対して操作を行うキャストを使用する際には常に注意を払う必要があります。
上記のすべての例において、中括弧 ({}) で囲まれた式で与えられた名前またはネーム・スペースは、ID として与えられた名前に相当します。
その名が示すように、ターゲットなしネーム・スペースの名前は空ストリングです。 空ストリングは、空ストリングとして評価される式、空の ID ""、または空ストリングとして定義されたネーム・スペース定数への参照によって選択できます。
フィールド参照を使用することは、普通既存フィールドの検索という意味でもあります。しかし、必要なフィールドがない場合 (普通は SET ステートメントのターゲット、および SELECT 関数の AS 文節のターゲットであるフィールド参照の場合)、そのフィールドが作成されます。
タイプ指定がない場合、フィールドのタイプは Name または NameValue (これらは事実上、新規フィールドには名前がないことを示す) にはなりません。
.そのデフォルトはフィールド名や列名から導出されたものであるか、または単純に製造順序名である場合もあります。名前がフィールド名であれば、これは実際にはツリー・コピーであり、ネーム・スペース名は上記のようにコピーされます。
それ以外の場合は、新規作成されたフィールドのネーム・スペースはパスを検索することによって導出されます。つまり、名前がフィールド参照の NameId 構文であるかのように扱われます。
SET OutputRoot.XML.Msg.Data.Name = NULL; -- これはフィールドを削除します
SET OutputRoot.XML.Msg.Data.Name VALUE = NULL; -- これはフィールドを削除せずに NULL 値を割り当てます
以前のバージョンとの互換性のために、LAST キーワードは引き続きサポートされていますが、使用は推奨されていません。LAST は索引式の一部としては使用できないため、[LAST] は有効で、[<] と同等ですが、[LAST3] は無効です。
Field [ > ] -- The first field, equivalent to [ 1 ] Field [ > (a + b) * 2 ] Field [ < ] -- The last field, equivalent to [ LAST ] Field [ < 1 ] -- The last field, equivalent to [ LAST ] Field [ < 2 ] -- The last but one field Field [ < (a + b) / 3 ]