XMLTABLE 関数の概要

XMLTABLE SQL 表関数は、XQuery 式の評価から表を戻します。 XQuery 式は通常は値をシーケンスとして戻しますが、XMLTABLE 関数を使用すると、XQuery 式を実行して値をシーケンスではなく表として戻します。 戻される表には、あらゆる SQL データ・タイプの列を含めることができます (XML を含む)。

XMLQUERY 関数のように、XMLTABLE で指定された XQuery 式に、変数を渡すことができます。 XQuery 式の結果は、結果として生じる表の列値を生成するために使用されます。 結果として生じる表の構造は、XMLTABLE の COLUMNS 節によって定義されます。 この節では、列名、データ・タイプ、および列値が生成される方法を指定して、列の特性を定義します。 名前を明示的に指定しないでも列名を引き渡せるより簡単な構文も使用できます。 XMLEXISTS、XMLQUERY、または XMLTABLE を使用した単純な列名の受け渡しを参照してください。

結果として生じる表の列値は、XMLTABLE の PATH 節に XQuery 式を指定して生成できます。 XQuery 式が PATH 節に指定されていない場合、列値を生成するために、列名が XQuery 式として使用され、 XMLTABLE の中で先に指定された XQuery 式の結果が、列値を作成するときに外部コンテキスト項目になります。 列値を生成する PATH 節の XQuery 式が空のシーケンスを戻した場合のために、オプションのデフォルト節を指定して列のデフォルト値を提供することもできます。

例えば、以下の SELECT ステートメントは、XMLTABLE 関数内の XQuery 式で、CUSTOMER 表の INFO 列を参照します。
SELECT X.* 
FROM CUSTOMER C, XMLTABLE ('$INFO/customerinfo' 
               COLUMNS 
               CUSTNAME CHAR(30) PATH 'name',
               PHONENUM XML PATH 'phone') 
     as X 
WHERE C.CID < 1003

結果の表の列タイプが XML ではなく、かつ列の値を定義する XQuery 式の結果が空のシーケンスでなければ、XMLCAST が暗黙的に使用されて、XML 値がターゲット・データ・タイプの値に変換されます。

XMLTABLE 関数ではオプションで名前空間を宣言できます。 XMLNAMESPACES 宣言で名前空間を指定する場合、 これらの名前空間のバインディングは XMLTABLE 関数呼び出し内のすべての XQuery 式に適用されます。 名前空間のバインディングを XMLNAMESPACES 宣言を使用しないで宣言する場合、 バインディングは名前空間宣言の後の行 XQuery 式にのみ適用されます。

XMLTABLE の利点

シーケンスの代わりに表を戻すと、以下のような操作を SQL 照会のコンテキスト内から実行できます。
  • SQL 全選択の中から行う、XQuery 式の結果に対する繰り返し処理
    例えば次の照会の場合、XMLTABLE 内の XQuery 式 "db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo" を実行した結果として得られた表に対し、SQL 全選択が繰り返し処理を行います。
    SELECT X.*
    FROM XMLTABLE ('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
                   COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
                           "PHONENUM" XML PATH 'phone')
         as X
  • 保管された XML 文書から表への値の挿入 (値の挿入については、XMLTABLE の例を参照してください)
  • XML 文書からの値に対するソート
    例えば次の照会では、CUSTOMER 表の INFO 列にある XML 文書に保管されたカスタマー名によって結果がソートされます。
    SELECT X.*
    FROM XMLTABLE ('db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo'
                   COLUMNS "CUSTNAME" CHAR(30) PATH 'name',
                           "PHONENUM" XML PATH 'phone')
         as X
    ORDER BY X.CUSTNAME
  • XML 値を一部はリレーショナルとして、一部は XML として保管する (値の挿入については、XMLTABLE の例を参照してください)
重要: XMLTABLE の PATH オプションで指定された XQuery 式が以下を戻す場合:
  • 複数の項目のシーケンスを戻す場合、列のデータ・タイプは XML でなければなりません。 XMLTABLE から戻された値を XML 列に挿入する場合、挿入される値が整形式 XML 文書であることを確認してください。 複数の項目を戻すシーケンス処理の例については、値の挿入についての XMLTABLE 例を参照してください。
  • 空のシーケンスを戻す場合、その列の値として NULL 値が戻されます。