当我使用
在PL-SQL中运行XQuery查询时 SELECT XQUERY('...' RETURNING CONTENT) FROM DUAL
结果总是在包含SQLXML字段的单行单列中连接返回。
这对于返回元素序列的查询很糟糕,对于返回文本节点序列的查询来说真的很讨厌。
有没有办法避免这种连接并为每个返回的项获取一行?
谢谢,
埃里克
答案 0 :(得分:2)
您想使用XMLTable而不是XQuery。
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
答案 1 :(得分: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>
这正是我正在寻找的。 p>