XML 메시지 및 데이터베이스 테이블에서 데이터 조인

메시지 데이터 및 데이터베이스와 상호작용하는 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
    );
관련 개념
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
관련 참조
Compute 노드
Database 노드
Filter 노드
ESQL 참조
SELECT 함수
SET문
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05780_