外部データベースへの照会のために標準的な SQL SELECT 構文がサポートされていますが、留意すべきいくつかの点があります。メッセージの中で構造を繰り返すのではなく、キーワード Database を使用して表の名前を事前に指定する必要があります。それは、SELECT が外部データベースをターゲットにしていることを示すためです。
データベースの SELECT の基本的な書式は次のようになります。
SELECT ... FROM Database.TABLE1 WHERE ...
必要であれば、次のようにしてスキーマ名を指定できます。
SELECT ... FROM Database.SCHEMA.TABLE1 WHERE ...
ここで、SCHEMA は、表 TABLE1 が定義されるスキーマの名前です。使用しているユーザー ID がスキーマと対応しない場合は、スキーマを組み込みます。例えば、ユーザー ID が USER1 の場合、式 Database.TABLE1 は Database.USER1.TABLE1 と同等です。しかし、データベース内の表と関連付けられているスキーマが db2admin である場合は、Database.db2admin.TABLE1 と指定しなければなりません。スキーマを組み込んでおらず、スキーマが現在のユーザー ID と対応しない場合、メッセージがメッセージ・フローに処理される際に、ブローカーは実行時エラーを生成します。
SELECT ... FROM Database.DataSource.SCHEMA.TABLE1 WHERE ...
列名への参照は、表名によって修飾するか、または、FROM 文節により表に対して定義されている相関名によって修飾します。次のような照会を正常に実行するには、
SELECT column1, column2 FROM table1
次の 2 つの書式のいずれかを書く必要があります。
SELECT T.column1, T.column2 FROM Database.table1 AS T SELECT table1.column1, table1.column2 FROM Database.table1
SELECT 内に現れる可能性のあるメッセージ内のフィールドへのあらゆる参照から、データベース列への参照を区別するために、次のようにする必要があります。
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...
標準的な select all SQL オプションが、SELECT 文節でサポートされています。このオプションを使用する場合、列名を表名によって修飾するか、または、表に対して定義されている相関名によって修飾する必要があります。以下に例を示します。
SELECT T.* FROM Database.Table1 AS T
データベース照会で ESQL のプロシージャーおよび関数の名前が使用される場合は、これらを呼び出しの中のどの部分に置くかが、これらの名前の処理方法に影響します。プロシージャーや関数が、照会によって戻される結果に影響を与えると判断される場合、これは ESQL としては処理されず、データベース呼び出しの一部として渡されます。
これが適用されるのは、SELECT ステートメントで、関数名やプロシージャー名を列の ID に使おうとする場合です。
例えば、Select 文節で指定された列の ID に CAST ステートメントが使用されている場合は、その列に戻されるデータのデータ・タイプを決定するデータベース照会で、この CAST ステートメントが使用されます。ESQL CAST はその ESQL データ・タイプに対しては実行されず、戻されるデータは、そのデータ・タイプのデータベース対話の変換処理の影響を受けます。
関数やプロシージャーが WHERE 文節で指定された列 ID で使用される場合、これは直接データベース・マネージャーに渡されて、処理されます。
以下のトピックの例では、外部データベース照会の結果セットが WebSphere Message Broker 内でどのように示されるかを考慮します。データベース照会の結果は、Compute ノードを使用して、メッセージ内のフィールドに代入されます。
列関数は、表またはメッセージの選択されたすべての行の単一列の値をとって、単一のスカラー結果を戻す関数です。