XML メッセージとデータベース表のデータの結合

SELECT ステートメントを使用して、メッセージ・データとデータベースの両方と対話できます。他のタイプと対話する SELECT 内にあるデータの一種と対話する SELECT をネストすることもできます。

2 人の顧客に対する送り状情報を含む以下の入力メッセージを考慮してください。

<Data>
<Invoice>
<CustomerNumber>1234</CustomerNumber>
<Item>
<PartNumber>1</PartNumber>
<Quantity>9876</Quantity>
</Item>
<Item>
<PartNumber>2</PartNumber>
<Quantity>8765</Quantity>
</Item>
</Invoice>
<Invoice>
<CustomerNumber>2345</CustomerNumber>
<Item>
<PartNumber>2</PartNumber>
<Quantity>7654</Quantity>
</Item>
<Item>
<PartNumber>1</PartNumber>
<Quantity>6543</Quantity>
</Item>
</Invoice>
</Data>

以下のデータベース表の価格、住所、およびその内容を考慮してください。

PARTNO      PRICE
----------- ------------------------
1            +2.50000E+001
2            +6.50000E+00
PARTNO      STREET                CITY             COUNTRY  
---------   -------------------   --------------   -------
1234        22 Railway Cuttings   East Cheam       England
2345        The Warren            Watership Down   England

以下の ESQL 変換をコーディングします。

-- 有効な出力メッセージを作成する
SET OutputRoot.MQMD = InputRoot.MQMD;
-- 適切な送り状を選択する
SET OutputRoot.XML.Data.Statement[] =
(SELECT I.CustomerNumber AS Customer.Number,
A.Street AS Customer.Street,
A.City AS Customer.Town,
A.Country AS Customer.Country,
-- 適切な項目を選択する
(SELECT II.PartNumber AS PartNumber,
II.Quantity AS Quantity,
PI.Price AS Price
FROM Database.db2admin.Prices AS PI,
I.Item[] AS II
WHERE II.PartNumber = PI.PartNo ) AS Purchases.Item[]
FROM Database.db2admin.Addresses AS A,
InputRoot.XML.Data.Invoice[] AS I
WHERE I.CustomerNumber = A.PartNo
);

次の出力メッセージが生成されます。入力メッセージにはデータベース表の価格と住所に関する情報が追加されました。

<Data>
<Statement>
<Customer>
<Number>1234</Number>
<Street>22 Railway Cuttings</Street>
<Town>East Cheam</Town>
<Country>England</Country>
</Customer>
<Purchases>
<Item>
<PartNumber>1</PartNumber>
<Quantity>9876</Quantity>
<Price>2.5E+1</Price>
</Item>
<Item>
<PartNumber>2</PartNumber>
<Quantity>8765</Quantity>
<Price>6.5E+1</Price>
</Item>
</Purchases>
</Statement>
<Statement>
<Customer>
<Number>2345</Number>
<Street>The Warren</Street>
<Town>Watership Down</Town>
<Country>England</Country>
</Customer>
<Purchases>
<Item>
<PartNumber>1</PartNumber>
<Quantity>6543</Quantity>
<Price>2.5E+1</Price></Item>
<Item>
<PartNumber>2</PartNumber>
<Quantity>7654</Quantity>
<Price>6.5E+1</Price>
</Item>
</Purchases>
</Statement>
</Data>

メッセージの SELECT ステートメント内にデータベースの SELECT ステートメントをネストできます。これは前出の例ほど効率的ではない場合が多いですが、メッセージが小さく、データベース表が大きい場合に都合がよいことがあります。

-- 有効な出力メッセージを作成する
SET OutputRoot.MQMD = InputRoot.MQMD;
-- 適切な送り状を選択する
SET OutputRoot.XML.Data.Statement[] =
(SELECT I.CustomerNumber AS Customer.Number,
-- アドレスをルックアップする
THE ( SELECT
A.Street,
A.City AS Town,
A.Country
FROM Database.db2admin.Addresses AS A
WHERE A.PartNo = I.CustomerNumber
) AS Customer,
-- 適切な項目を選択する
(SELECT
II.PartNumber AS PartNumber,
II.Quantity AS Quantity,
-- 価格をルックアップする
THE (SELECT ITEM P.Price
FROM Database.db2admin.Prices AS P
WHERE P.PartNo = II.PartNumber
) AS Price
FROM I.Item[] AS II ) AS Purchases.Item[]
FROM InputRoot.XML.Data.Invoice[] AS I
);
関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
Compute ノード
Database ノード
Filter ノード
ESQL 参照
SELECT 関数
SET ステートメント
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 Last updated: 5 01, 2006
ak05780_