Auswählen von Daten aus Datenbankspalten

Sie können einen Rechen-, Filter oder Datenbankknoten konfigurieren, um Daten aus Datenbankspalten auszuwählen und in eine Ausgabenachricht einzufügen. Im folgenden Beispiel wird davon ausgegangen, dass es eine Datenbanktabelle USERTABLE mit zwei Spalten des Datentyps 'char(6)' (oder funktional entsprechend) gibt: Column1 und Column2. Die Tabelle enthält zwei Zeilen (Row 1 und Row 2):

  Column1 Column2
Row 1 Wert1 Wert2
Row 2 Wert3 Wert4

Konfigurieren Sie den Rechen-, Filter- oder Datenbankknoten so, dass er die Datenbank, in der Sie die Tabelle definiert haben, identifiziert.Klicken Sie z. B. bei Verwendung der Standarddatenbank (wird über die Knoteneigenschaft "Datenquelle" angegeben) mit der rechten Maustaste auf den Knoten, wählen Sie ESQL öffnen aus, und codieren Sie die folgenden ESQL-Anweisungen im Modul für diesen Knoten:

SET OutputRoot = InputRoot;
DELETE FIELD OutputRoot.*[<];
SET OutputRoot.XML.Test.Result[] =
  (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);

Als Ergebnis wird folgende Ausgabenachricht erstellt:

<Test>
   <Result>
      <Column1>Wert1</Column1>
      <Column2>Wert2</Column2>
   </Result>
   <Result>
      <Column1>Wert3</Column1>
      <Column2>Wert4</Column2>
   </Result>
</Test>
Senden Sie zum Auslösen der SELECT-Anweisung eine Auslösenachricht mit folgendem XML-Hauptteil:
<Test>
   <Result>
      <Column1></Column1>
      <Column2></Column2>
   </Result>
   <Result>
      <Column1></Column1>
      <Column2></Column2>
   </Result>
</Test>

Die genaue Struktur des XML-Codes ist nicht wichtig, aber der einschließende Tag muss <Test> heißen, so dass er mit der Referenz im ESQL-Code übereinstimmt. Andernfalls führen die ESQL-Anweisungen dazu, dass einschließende Tags auf höchster Ebene gebildet werden, was kein gültiger XML-Code ist.

Wenn Sie eine Ausgabenachricht erstellen möchten, die alle Spalten aus allen Zeilen, die eine bestimmte Bedingung erfüllen, enthält, geben Sie in der SELECT-Anweisung eine WHERE-Klausel an:

-- Deklarieren und Initialisieren einer Variable zur Aufnahme
--      des Testwertes (in diesem Fall der Familienname Smith)
DECLARE CurrentCustomer STRING 'Smith';

-- Durchsuchen der Tabelleneinträge zum Extrahieren passender Informationen
SET OutputRoot.XML.Invoice[] = 
    (SELECT R FROM Database.USERTABLE AS R
              WHERE R.Customer.LastName = CurrentCustomer
    );

Die Nachrichtenfelder werden in derselben Reihenfolge wie die Spalten in der Tabelle erstellt.

Wenn Sie mit SQL in einer Datenbankumgebung vertraut sind, erwarten Sie möglicherweise einen Code mit SELECT *. Dies wird jedoch vom Broker nicht akzeptiert, weil alle Verweise auf Spalten mit einem Korrelationsnamen beginnen müssen. Dadurch werden Mehrdeutigkeiten bei deklarierten Variablen verhindert. Ein Code mit SELECT I.* wird zwar vom Broker akzeptiert, der * wird jedoch als das erste untergeordnete Element interpretiert und nicht als Zeichen für alle Element, wie Sie es möglicherweise aus anderen Datenbank-SQLs kennen.

Auswählen von Daten aus einer Tabelle in einem Datenbanksystem mit Groß-/Kleinschreibung

Wenn das Datenbanksystem die Groß-/Kleinschreibung berücksichtigt, müssen Sie eine andere Methode verwenden. Diese Methode ist auch erforderlich, wenn Sie den Namen des generierten Feldes ändern möchten:

SET OutputRoot = InputRoot;
SET OutputRoot.XML.Test.Result[] =
  (SELECT T.Column1 AS Column1, T.Column2 AS Column2
  FROM Database.USERTABLE AS T);

In diesem Beispiel wird dieselbe Nachricht erstellt wie in dem Beispiel oben. Stellen Sie sicher, dass Verweise auf Datenbankspalten (in diesem Beispiel T.Column1 und T.Column2) in der richtigen Groß-/Kleinschreibung angegeben werden, so dass sie genau mit den Datenbankdefinitionen übereinstimmen. Wenn Sie stattdessen beispielsweise T.COLUMN1 angeben, generiert der Broker einen Laufzeitfehler. Beachten Sie die Verwendung von Column1 und Column2 in der SELECT-Anweisung. Hier können Sie beliebige Werte angeben. Sie müssen nicht wie in diesem Beispiel mit den Namen der Spalten, die Sie in der Datenbank definiert haben, übereinstimmen.

Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
ak05810_