Verknüpfen von Daten aus XML-Nachrichten und Datenbanktabellen

Sie können SELECT-Anweisungen verwenden, die sowohl mit Nachrichtendaten als auch mit Datenbanken interagieren. Sie können eine SELECT-Anweisung, die mit einem dieser Datentypen interagiert, aber auch in eine SELECT-Anweisung, die mit dem anderen Typ interagiert, verschachteln.

Betrachten Sie die folgende Eingabenachricht, die Rechnungsdaten 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

Für diese Tabellen wird folgender ESQL-Code für eine Umwandlung erstellt:

-- Erstellen einer gültigen Ausgabenachricht
SET OutputRoot.MQMD = InputRoot.MQMD; 
-- Auswählen geeigneter Rechnungen
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,
-- Auswählen geeigneter Elemente
(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
);

Als Ergebnis wird folgende Ausgabenachricht generiert. Die Eingabenachricht wird um den Preis und die Adressinformationen aus den Datenbanktabellen 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-Anweisung für die Datenbank in der SELECT-Anweisung für die Nachricht verschachteln. Dies 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.

-- Erstellen einer gültigen Ausgabenachricht
SET OutputRoot.MQMD = InputRoot.MQMD; 
-- Auswählen geeigneter Rechnungen
SET OutputRoot.XML.Data.Statement[] =
(SELECT I.CustomerNumber                  AS Customer.Number,
-- Suchen der Adresse
THE ( SELECT 
A.Street,
A.City    AS Town,
A.Country
FROM Database.db2admin.Addresses AS A
WHERE A.PartNo = I.CustomerNumber
)                             AS Customer,
-- Auswählen geeigneter Elemente
(SELECT 
II.PartNumber AS PartNumber,
II.Quantity   AS Quantity,
-- Suchen des Preises
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
);
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalt definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Rechenknoten
Datenbankknoten
Filterknoten
ESQL-Referenz
Funktion SELECT
SET-Anweisung
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
ak05780_