同じデータベース内に作成した複数の表を参照することができます。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、Filter、または Database ノードを構成します。例えば、デフォルト・データベースを使用する場合には、ノードを右クリックし、「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 を使用して表と表、メッセージとメッセージ、または表とメッセージを結合することができます。XML メッセージとデータベース表のデータの結合には、メッセージ・データをデータベース表内のデータにマージする方法の例が示されています。
(ノードの data source プロパティーで定義される)
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 ステートメント内のトークンを処理できない場合は、エラーが戻されます。