PL-SQLでXQueryクエリを実行すると
SELECT XQUERY('...' RETURNING CONTENT) FROM DUAL
結果は常に、SQLXMLフィールドを保持する単一行の単一列に連結されて返されます。
これは、要素のシーケンスを返すクエリには良くなく、テキストノードのシーケンスを返すクエリには本当に厄介です。
この連結を回避し、返品されたアイテムごとに行を取得する方法はありますか?
ありがとう、
エリック
XQueryの代わりにXMLTableを使用したい。
XMLTableは、XQuery評価の結果をリレーショナル行と列にマップします。SQLを使用して、関数によって返された結果を仮想リレーショナルテーブルとしてクエリできます。
例えば:
create table customer as
select 1 id, 'Smith' last_name from dual union all
select 2 id, 'Jackson' last_name from dual union all
select 3 id, 'Peters' last_name from dual;
SELECT * from XMLTable('
for $customer in ora:view("customer")/ROW
return $customer/LAST_NAME'
columns "last_name" varchar2(4000) path '/LAST_NAME');
last_name
---------
Smith
Jackson
Peters
jonearlesの答えを詳しく説明すると、XMLTableはXQUERYと同じくらい一般的です。違いは、XQUERYが単一の値を返すのに対し、XMLTableは完全なテーブルと見なされることです。
XMLTableを使用すると、次のようなことができます。
SQL> select * from XMLTABLE ('declare variable $v as xs:string external; $v, $v' PASSING 'Hello World' as "v") ;
COLUMN_VALUE
--------------------------------------------------------------------------------
Hello World
Hello World
そしてまた:
SQL> select * from XMLTABLE ('declare variable $v as xs:string external; <e>{$v}</e>,<e>{$v}</e>' PASSING 'Hello World' as "v") ;
COLUMN_VALUE
--------------------------------------------------------------------------------
<e>Hello World</e>
<e>Hello World</e>
そしてそれはまさに私が探していたものです。