2

PL-SQLでXQueryクエリを実行すると

 SELECT XQUERY('...' RETURNING CONTENT) FROM DUAL

結果は常に、SQLXMLフィールドを保持する単一行の単一列に連結されて返されます。

これは、要素のシーケンスを返すクエリには良くなく、テキストノードのシーケンスを返すクエリには本当に厄介です。

この連結を回避し、返品されたアイテムごとに行を取得する方法はありますか?

ありがとう、

エリック

4

2 に答える 2

2

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
于 2012-05-20T04:00:25.583 に答える
1

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>

そしてそれはまさに私が探していたものです。

于 2012-05-20T17:06:17.130 に答える