データベース列からのデータの選択

Compute ノードを構成して、データベースの列からデータを選択し、出力メッセージに組み込むことができます。 以下の例では、USERTABLE というデータベース・テーブルを作成し、 2 つの char(6) データ・タイプの列 (またはそれに相当するもの) を設け、 それぞれ Column1 および Column2 としたと想定します。 テーブルには 2 つの行があります。

  Column1 Column2
行 1 value1 value2
行 2 value3 value4

Compute ノードを構成して、テーブルを定義した (「データ・ソース (Data Source)」 プロパティー) データベースを識別します。 ノードを右クリックし、「ESQL のオープン(Open ESQL)」を選択して、 このノードのモジュールで次の ESQL ステートメントをコーディングします。

SET OutputRoot = InputRoot;
DELETE FIELD OutputRoot.*[<];
SET OutputRoot.XML.Test.Result[] =
  (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);

次の出力メッセージが生成されます。

<Test>
     <Result>
      <Column1>value1</Column1>
      <Column2>value2</Column2>
     </Result>
     <Result>
      <Column1>value3</Column1>
      <Column2>value4</Column2>
     </Result>
</Test>
SELECT を起動するためには、次のような形式の XML 本体を使用して、トリガー・メッセージに入れて送信します。
<Test>
     <Result>
      <Column1></Column1>
      <Column2></Column2>
     </Result>
     <Result>
      <Column1></Column1>
      <Column2></Column2>
     </Result>
</Test>

XML の厳密な構造は重要ではありませんが、 包含するタグは ESQL での参照と対応するように <Test> でなければなりません。 そうでない場合、ESQL ステートメントの結果として、 最上位の包含タグが形成されることになり、無効な XML になってしまいます。

特定の条件を満たすすべての行のすべての列を組み込んだ出力メッセージを作成したい場合は、 WHERE 文節を持つ SELECT ステートメントを使用します。

-- 変数を宣言および初期化して
--      テスト値を取得する (この場合は Smith)
DECLARE CurrentCustomer STRING 'Smith';

-- テーブルのレコードをループして一致する情報を抽出する。
SET OutputRoot.XML.Invoice[] = 
        (SELECT R FROM Database.USERTABLE AS R
                            WHERE R.Customer.LastName = CurrentCustomer
    );

メッセージ・フィールドは、列がテーブルに出現するのと同じ順序で作成されます。

データベース環境における SQL に詳しいならば、SELECT * をコーディングすることを検討できます。 列へのすべての参照は相関名で始める必要があるため、これはブローカーには受け入れられません。 これは宣言済みの変数に関するあいまいさを避けることになります。 また、SELECT I.* をコーディングする場合、ブローカーには受け入れられますが、* は最初の子エレメントとして解釈され、 他のデータベース SQL に期待するようにすべてのエレメントとしては解釈されません。

大文字小文字の区別のあるデータベース・システムでデータをテーブルから選択する

データベース・システムに大文字小文字の区別がある場合には、別のアプローチを使う必要があります。 生成されるフィールドの名前を別のものに変更したい場合にも、そのアプローチが必要とされます。

SET OutputRoot = InputRoot;
SET OutputRoot.XML.Test.Result[] =
    (SELECT T.Column1 AS Column1, T.Column2 AS Column2
  FROM Database.USERTABLE AS T);

この例は前述の例と同じメッセージを生成します。 データベース列への参照(この例では、T.Column1 および T.Column2)が、データベース定義と厳密に合致するように、大文字小文字が正しく指定されているか確認してください。 そうしない場合、たとえば、T.COLUMN1 を指定した場合、ブローカーは実行時エラーを生成します。 SELECT ステートメントでの Column1 および Column2 の使用は注意してください。 どのような値も使用でき、この例とは異なり、データベースで定義した列の名前と一致している必要はありません。

関連概念
メッセージ・フロー
ESQL
メッセージのモデル化

関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理

関連資料
Compute ノード
Database ノード
Filter ノード
ESQL
DECLARE ステートメント
DELETE ステートメント
SELECT 関数
SET ステートメント