XMLQUERY

構文

XML_passing_clause::=

目的

XMLQUERYでは、SQL文のXMLデータを問い合せることができます。このファンクションは、文字列リテラル、オプションのコンテキスト項目、および他のバインド変数としてXQuery式を取り、これらの入力値を使用してXQuery式の評価結果を戻します。

  • XQuery_stringは、プロローグを含む完全なXQuery式です。

  • XML_passing_clauseexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。exprがリレーショナル列の場合、宣言された照合はOracle XML DBで無視されます。

  • RETURNING CONTENTは、XQuery式の評価結果がXML 1.0文書か、またはXML 1.0セマンティクスに準拠したドキュメント・フラグメントのいずれかであることを示します。

  • 結果セットが空の場合、このファンクションは、SQL NULL値を戻します。NULL ON EMPTYキーワードがデフォルトで実装されます。このキーワードは、意味を明確にするために示されます。

関連項目:

このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

次の文は、XML_passing_clauseoe.warehouses表のwarehouse_spec列をコンテキスト項目として指定します。この文は、領域が50Kより大きいウェアハウスに関する特定の情報を戻します。

SELECT warehouse_name,
EXTRACTVALUE(warehouse_spec, '/Warehouse/Area'),
XMLQuery(
   'for $i in /Warehouse
   where $i/Area > 50000
   return <Details>
             <Docks num="{$i/Docks}"/>
             <Rail>
               {
               if ($i/RailAccess = "Y") then "true" else "false"
               }
             </Rail>
          </Details>' PASSING warehouse_spec RETURNING CONTENT) "Big_warehouses"
   FROM warehouses;

WAREHOUSE_ID Area      Big_warehouses
------------ --------- --------------------------------------------------------
           1     25000
           2     50000
           3     85700 <Details><Docks></Docks><Rail>false</Rail></Details>
           4    103000 <Details><Docks num="3"></Docks><Rail>true</Rail></Details>
 . . .