Die SQL-Standardsyntax für SELECT wird für Abfragen an eine externe Datenbank zwar unterstützt, dabei muss jedoch einiges beachtet werden. Der Name der Tabelle muss als Präfix das Schlüsselwort 'Database' enthalten, um anzugeben, dass das Ziel von SELECT die externe Datenbank und keine Wiederholungsstruktur in der Nachricht sein soll.
Die Grundform von SELECT für eine Datenbank lautet wie folgt:
SELECT ... FROM Database.TABLE1 WHERE ...
Gegebenenfalls können Sie auch einen Schemanamen angeben:
SELECT ... FROM Database.SCHEMA.TABLE1 WHERE ...
Dabei ist SCHEMA der Namen des Schemas, in dem die Tabelle TABLE1 definiert ist. Fügen Sie das Schema ein, wenn die Benutzer-ID, die für die Ausführung verwendet wird, nicht mit dem Schema übereinstimmt. Wenn Ihre Benutzer-ID beispielsweise 'USER1' lautet, ist der Ausdruck 'Database.TABLE1' äquivalent zu 'Database.USER1.TABLE1'. Wenn der Tabelle in der Datenbank jedoch das Schema 'db2admin' zugeordnet ist, müssen Sie 'Database.db2admin.TABLE1' angeben. Wenn Sie das Schema nicht einfügen und das Schema nicht Ihrer aktuellen Benutzer-ID entspricht, generiert der Broker einen Laufzeitfehler, wenn eine Nachricht von dem Nachrichtenfluss verarbeitet wird.
SELECT ... FROM Database.DataSource.SCHEMA.TABLE1 WHERE ...
Qualifizieren Sie Verweise auf Spaltennamen entweder mit dem Tabellennamen oder dem Korrelationsnamen, der für die Tabelle durch die FROM-Klausel definiert ist. Während Sie also normalerweise z. B. folgende Abfrage ausführen könnten:
SELECT column1, column2 FROM table1
müssen Sie hier eine der beiden folgenden Formen verwenden:
SELECT T.column1, T.column2 FROM Database.table1 AS T SELECT table1.column1, table1.column2 FROM Database.table1
Dies ist erforderlich, um Verweise auf Datenbankspalten von Verweisen auf Felder in einer Nachricht zu unterscheiden, die ebenfalls in der SELECT-Klausel enthalten sein können:
SELECT T.column1, T.column2 FROM Database.table1 AS T WHERE T.column3 = Body.Field2
SELECT T.column1 AS price, T.column2 AS item FROM Database.table1 AS T WHERE...
Die SQL-Standardoption SELECT ALL wird in der SELECT-Klausel unterstützt. Wenn Sie diese Option verwenden, müssen Sie die Spaltennamen entweder mit dem Tabellennamen oder dem Korrelationsnamen, der für die Tabelle definiert ist, qualifizieren. Beispiel:
SELECT T.* FROM Database.Table1 AS T
Wenn Sie ESQL-Prozedurnamen und -Funktionsnamen in einer Datenbankabfrage verwenden, wirkt sich deren Position in dem Aufruf auf die Verarbeitung dieser Namen aus. Wenn festgestellt wird, dass sich die Prozedur oder Funktion auf die von der Abfrage zurückgegebenen Ergebnisse auswirkt, wird sie nicht als ESQL verarbeitet, sondern wird als Teil des Datenbanksaufrufs übergeben.
Dies tritt ein, wenn sie versuchen, einen Funktions- oder Prozedurnamen mit den Spalten-IDs in der SELECT-Anweisung zu verwenden.
Wenn Sie beispielsweise eine CAST-Anweisung für eine in der SELECT-Klausel angegebene Spalten-ID verwenden, wird diese bei der Datenbankabfrage verwendet, um den Datentyp der für diese Spalte zurückgegebenen Daten zu bestimmen. Für diesen ESQL-Datentyp wird keine ESQL-CAST-Umsetzung ausgeführt, und die Interpretation dieses Datentyps durch die Datenbankinteraktion wirkt sich auf die zurückgegebenen Daten aus.
Wenn Sie eine Funktion oder Prozedur für eine in der WHERE-Klausel angegebene Spalten-ID verwenden, wird diese direkt zur Verarbeitung an den Datenbankmanager übergeben.
Die Beispiele in den nachfolgenden Abschnitten veranschaulichen die Darstellung der Ergebnisse der externen Datenbankabfragen in WebSphere Message Broker. Die Ergebnisse der Datenbankabfragen werden mit Hilfe eines Rechenknotens Feldern in einer Nachricht zugeordnet.
Bei einer Spaltenfunktion handelt es sich um eine Funktion, die die Werte einer einzelnen Spalte in allen ausgewählten Zeilen einer Tabelle oder Nachricht übernimmt und ein einzelnes skalares Ergebnis zurückgibt.