DB2 Version 10.1 for Linux, UNIX, and Windows

XQuery 関数を使用した DB2 データの検索

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 の オペランドに、この名前を大文字で指定する必要があります。