Zwar wird die Standardsyntax der SQL-Anweisung SELECT für Abfragen an eine externe Datenbank unterstützt, es sind jedoch einige Punkte zu beachten. Sie müssen dem Namen der Tabelle das Schlüsselwort 'Database' als Präfix voranstellen, um anzuzeigen, dass sich die SELECT-Anweisung an die externe Datenbank richtet und nicht an eine sich wiederholende Struktur in der Nachricht.
Die SELECT-Anweisung für eine Datenbank hat folgendes Basisformat:
SELECT ... FROM Database.TABLE1 WHERE ...
Falls nötig, können Sie einen Schemanamen angeben:
SELECT ... FROM Database.SCHEMA.TABLE1 WHERE ...
Dabei steht SCHEMA für den Namen des Schemas, in dem die Tabelle TABLE1 definiert ist. Fügen Sie das Schema ein, wenn die Benutzer-ID, unter der Sie arbeiten, nicht mit dem Schema übereinstimmt. Wenn Ihre Benutzer-ID beispielsweise USER1 lautet, ist der Ausdruck Database.TABLE1 gleichbedeutend mit Database.USER1.TABLE1. Heißt das Schema, das der Tabelle zugeordnet ist, jedoch db2admin, müssen Sie Database.db2admin.TABLE1 angeben. Wenn Sie das Schema nicht angeben und es nicht mit Ihrer aktuellen Benutzer-ID übereinstimmt, generiert der Broker einen Laufzeitfehler, wenn eine Nachricht vom Nachrichtenfluss verarbeitet wird.
SELECT ... FROM Database.DataSource.SCHEMA.TABLE1 WHERE ...
Qualifizieren Sie Verweise auf Spaltennamen entweder mit dem Tabellennamen oder dem Korrelationsnamen, die durch die FROM-Klausel für die Tabelle definiert sind. Wo Sie also normalerweise eine Abfrage wie
SELECT column1, column2 FROM table1
ausführen können, müssen Sie eines der folgenden beiden Formate verwenden:
SELECT T.column1, T.column2 FROM Database.table1 AS T SELECT table1.column1, table1.column2 FROM Database.table1
Dies ist nötig, um Verweise auf Datenbankspalten von Verweisen auf Felder in einer Nachricht, die ebenfalls Teil der SELECT-Anweisung sein können, zu unterscheiden:
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 für 'Alles auswählen' wird in der SELECT-Klausel unterstützt. Bei Verwendung dieser Option müssen Sie die Spaltennamen entweder mit dem Tabellennamen oder dem Korrelationsnamen, die für die Tabelle definiert sind, qualifizieren. Beispiel:
SELECT T.* FROM Database.Table1 AS T
Wenn Sie innerhalb einer Datenbankabfrage Namen von ESQL-Prozeduren und Funktionen verwenden, wird durch die Position dieser Namen innerhalb des Aufrufs bestimmt, wie sie verarbeitet werden. Wird festgestellt, dass die Prozedur oder Funktion die von der Abfrage zurückgegebenen Ergebnisse beeinflusst, wird sie nicht als ESQL-Anweisung ausgeführt, sondern als Teil des Datenbankaufrufs übergeben.
Dies gilt für Versuche, einen Funktions- oder Prozedurnamen mit den Spaltenbezeichnern innerhalb der SELECT-Anweisung zu verwenden.
Wenn Sie beispielsweise eine CAST-Anweisung auf einen Spaltenbezeichner, der in der SELECT-Klausel angegeben ist, anwenden, wird diese während der Datenbankabfrage dazu verwendet, den Datentyp der für die Spalte zurückgegebenen Daten zu ermittelt. Für den betreffenden ESQL-Datentyp wird keine ESQL-CAST-Anweisung ausgeführt, und die zurückgegebenen Daten werden von der Interpretation des betreffenden Datentyps im Rahmen der Datenbankinteraktion beeinflusst.
Wenn Sie eine Funktion oder Prozedur auf einen Spaltenbezeichner, der in der WHERE-Klausel angegeben ist, anwenden, wird diese direkt zur Verarbeitung an den Datenbankmanager übergeben.
Die Beispiele in den folgenden Abschnitten zeigen, wie die Ergebnisse von externen Datenbankabfragen in WebSphere Message Broker dargestellt werden. Die Ergebnisse von Datenbankabfragen werden über einen Rechenknoten Feldern in einer Nachricht zugeordnet.
Eine Spaltenfunktion ist eine Funktion, die die Werte einer einzelnen Spalte in allen ausgewählten Zeilen einer Tabelle oder Nachricht verarbeitet und ein einziges skalares Ergebnis zurückgibt.