XQuery では、照会において以下の関数のいずれかを呼び出して、DB2® データベースから入力 XML データを取得できます。db2-fn:sqlquery および db2-fn:xmlcolumn。
関数 db2-fn:xmlcolumn は、XML 列全体を検索します。
一方 db2-fn:sqlquery は、SQL 全選択に基づく XML 値を
検索します。
- db2-fn:xmlcolumn
- db2-fn:xmlcolumn 関数は、
表またはビュー内の XML 列を識別するストリング・リテラル引数を使用し、
その列にある XML 値のシーケンスを戻します。 この関数の
引数は、大/小文字を区別します。 ストリング・リテラル引数は、
修飾された XML タイプの列名にする必要があります。 この関数により、検索条件を適用しなくても、XML データの列全体を抽出することができます。
以下の例において、
照会は
db2-fn:xmlcolumn 関数を使用して、
BUSINESS.ORDERS 表の PURCHASE_ORDER 列内のすべての購入注文を
取得します。 続いて
この照会は、この入力データを操作して、これらの購入注文の配送先住所から
市区町村を抽出します。 照会の結果は、注文商品が配送されるすべての
市区町村のリストです。
db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city
- db2-fn:sqlquery
- db2-fn:sqlquery 関数は、fullselect を表すストリング引数を使用し、fullselect によって
戻される XML 値の連結である XML シーケンスを戻します。 fullselect では、単一列の結果セットを指定する必要があり、
列はデータ・タイプが XML である必要があります。 fullselect を指定することにより、SQL の機能を使用して XML データを XQuery に提供できます。
関数は、パラメーターを使用した SQL ステートメントへの値の受け渡しをサポートします。
以下の
例では、BUSINESS.ORDERS という表に PURCHASE_ORDER という XML 列が
含まれています。 この例の照会は、
db2-fn:sqlquery 関数を使用して
SQL を呼び出して、配送日付が 2005 年 6 月 15 日であるすべての購入注文を
取得します。 続いて、この照会は、この入力データを操作して、これらの購入注文の
配送先住所から市区町村を抽出します。 照会の結果は、6 月 15 日に
注文商品が配送されるすべての市区町村のリストです。
db2-fn:sqlquery("
SELECT purchase_order FROM business.orders
WHERE ship_date = '2005-06-15' ")/shipping_address/city
重要: db2-fn:sqlquery 関数
または db2-fn:xmlcolumn 関数によって戻される XML シーケンスには、アトミック値およびノードを
含む任意の XML 値を含めることができます。 これらの関数は、必ずしも整形式の文書の
シーケンスを戻すとは限りません。 例えば、関数が、XML データ・タイプのインスタンスとして、
単一のアトミック値 (36 など) を戻す場合があります。
SQL および XQuery には、名前の大/小文字の区別に関して
異なる規則があります。 db2-fn:sqlquery 関数および db2-fn:xmlcolumn 関数の使用時には、
これらの差異に注意する必要があります。
- SQL は大/小文字を区別する言語ではない
- デフォルトでは、SQL ステートメントで使用されるすべての通常 ID は、
自動的に大文字に変換されます。 このため、SQL の表および列の
名前は、上記の例における BUSINESS.ORDERS および PURCHASE_ORDER のように、
通例は大文字の名前です。 SQL ステートメントでは、
business.orders および purchase_order のように小文字の名前を使用してこれらの列を
参照できますが、これらは SQL ステートメントの処理中に自動的に大文字に
変換されます。 (名前を二重引用符で囲むことにより、SQL で区切り ID と呼ばれる
大/小文字を区別する名前を作成することもできます。)
- XQuery は大/小文字を区別する言語です
- XQuery は、小文字の名前を大文字に変換しません。 この違いにより、XQuery および SQL の同時使用時に混乱が生じることがあります。
db2-fn:sqlquery に渡されるストリングは、SQL 照会として解釈され、SQL パーサーによって構文解析されて、これによりすべての名前が大文字に変換されます。 このため、
db2-fn:sqlquery の例では、表名 business.orders、および列名
purchase_order および ship_date を、大文字または小文字のいずれでも表示できます。 ただし、db2-fn:xmlcolumn のオペランドは、SQL 照会ではありません。 オペランドは、
列名を表す、大/小文字を区別する XQuery ストリング・リテラルです。 列の実際の名前は BUSINESS.ORDERS.PURCHASE_ORDER であるため、db2-fn:xmlcolumn の
オペランドに、この名前を大文字で指定する必要があります。