메시지 데이터 및 데이터베이스와 상호작용하는 SELECT문을 사용할 수 있습니다. 또한 한 데이터 유형과 상호작용하는 SELECT를 다른 유형과 상호작용하는 SELECT에 중첩할 수도 있습니다.
두 고객의 송장(invoice) 정보를 포함하는 다음과 같은 입력 메시지를 고려하십시오.
<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 변환을 코딩하는 경우,
-- Create a valid output message SET OutputRoot.MQMD = InputRoot.MQMD; -- Select suitable invoices 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 suitable items (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를 중첩할 수 있습니다. 대부분의 경우 이것은 이전 예와 같이 효율적이지는 않지만, 메시지가 작고 데이터베이스 테이블이 크면 더 낫다는 것을 알 수 있습니다.
-- Create a valid output message SET OutputRoot.MQMD = InputRoot.MQMD; -- Select suitable invoices SET OutputRoot.XML.Data.Statement[] = (SELECT I.CustomerNumber AS Customer.Number, -- Look up the address THE ( SELECT A.Street, A.City AS Town, A.Country FROM Database.db2admin.Addresses AS A WHERE A.PartNo = I.CustomerNumber ) AS Customer, -- Select suitable items (SELECT II.PartNumber AS PartNumber, II.Quantity AS Quantity, -- Look up the price 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 );