Daten aus Nachrichten und Datenbanktabellen verknüpfen

Sie können SELECT-Funktionen verwenden, die sowohl mit Nachrichtendaten als auch mit Datenbanken interagieren.

Sie können eine SELECT-Funktion, die mit einem dieser Datentypen interagiert, aber auch in eine SELECT-Klausel, die mit dem anderen Typ interagiert, verschachteln.

Sehen Sie sich folgende Eingabenachricht an, die Rechnungsinformationen für zwei Kunden enthält:

<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>

Betrachten Sie die folgenden Datenbanktabellen mit Preisen und Adressen sowie deren Inhalte:

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

Wenn Sie folgende ESQL-Umwandlung codieren:

-- Create a valid output message
SET OutputRoot.MQMD = InputRoot.MQMD; 

-- Select suitable invoices
SET OutputRoot.XMLNS.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.XMLNS.Data.Invoice[] AS I
           
    WHERE I.CustomerNumber = A.PartNo
    );

wird folgende Ausgabenachricht generiert. Die Eingabenachricht wird um die Preis- und Adressinformationen aus der Datenbanktabelle erweitert:

<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>

Sie können die SELECT-Klausel für die Datenbank in der SELECT-Klausel für die Nachricht verschachteln. Der Code ist in den meisten Fällen zwar nicht so effizient wie das vorherige Beispiel, aber möglicherweise ist es Ihnen lieber, wenn die Nachrichten kurz und die Datenbanktabellen groß sind.

-- Create a valid output message
SET OutputRoot.MQMD = InputRoot.MQMD; 

-- Select suitable invoices
SET OutputRoot.XMLNS.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.XMLNS.Data.Invoice[] AS I
    );
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Compute-Knoten
Database-Knoten
Filter-Knoten
ESQL-Referenz
SELECT-Funktion
SET-Anweisung
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:29:32

ak05780_