同じデータベース内に作成した複数の表を参照することができます。SELECT ステートメントの FROM 文節を使用して 2 つの表のデータを結合します。
以下の例では、USERTABLE1 と USERTABLE2 の 2 つのデータベース表がある場合を想定します。この 2 つの表には、それぞれ 2 つの char(6) データ・タイプの列 (またはそれに相当するもの) が設けられています。
USERTABLE1 には 2 つの行があります。
Column1 | Column2 | |
---|---|---|
行 1 | value1 | value2 |
行 2 | value3 | value4 |
USERTABLE2 には 2 つの行があります。
Column3 | Column4 | |
---|---|---|
行 1 | value5 | value6 |
行 2 | value7 | value8 |
1 つの SELECT 関数によって参照されるすべての表は、同じデータベース内になければなりません。 このデータベースは、(ノードの Data Source プロパティーで指定された) デフォルト・データベース、または (SELECT 関数の FROM 文節で指定された) 別のデータベースのどちらかとすることができます。
表を定義したデータベースを識別するために使用している Compute、Database、または Filter ノードを構成します。 例えば、デフォルト・データベースを使用する場合には、ノードを右クリックし、「ESQL のオープン」を選択して、このノードのモジュール内に以下の ESQL ステートメントをコーディングします。
SET OutputRoot.XML.Test.Result[] =
(SELECT A.Column1 AS FirstColumn,
A.Column2 AS SecondColumn,
B.Column3 AS ThirdColumn,
B.Column4 AS FourthColumn
FROM Database.USERTABLE1 AS A,
Database.USERTABLE2 AS B
WHERE A.Column1 = 'value1' AND
B.Column4 = 'value8'
);
このコードは、次の内容の出力メッセージを生成します。
<Test>
<Result>
<FirstColumn>value1</FirstColumn>
<SecondColumn>value2</SecondColumn>
<ThirdColumn>value7</ThirdColumn>
<FourthColumn>value8</FourthColumn>
</Result>
</Test>
上記の例は、2 つのデータベース表からデータにアクセスする方法を示しています。 複数のデータベース表にアクセスするためにより複雑な FROM 文節をコーディングすることができます (すべての表は同じデータベースに含まれなければなりません)。1 つ以上のメッセージ・ツリーを参照することもできるため、SELECT を使用して表と表、メッセージとメッセージ、または表とメッセージを結合することができます。メッセージとデータベース表のデータの結合には、メッセージ・データをデータベース表内のデータにマージする方法の例が示されています。
WHERE 文節の列 ID で ESQL 関数またはプロシージャーを指定した場合、これは ESQL としてではなく、データベース照会の一部として処理されます。
次の例をご覧ください。
SET OutputRoot.XML.Test.Result =
THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T
WHERE UPPER(T.Column2) = 'VALUE2');
このコードは、大文字に変換された Column2 の値が VALUE2 の行を戻すことを試行します。 しかし、特定の行の T.Column2 の値を判別できるのは、データベース・マネージャーのみです。したがって、データベース照会が実行される前は、ESQL では処理できません。これは WHERE 文節がメッセージ・フローに戻す行を決定するためです。
このような理由で、UPPER はデータベース・マネージャーに渡され、その処理の一部として組み込まれます。 ただし、データベース・マネージャーが SELECT ステートメント内のトークンを処理できない場合は、エラーが戻されます。