当我使用 PL-SQL 运行 XQuery 查询时
SELECT XQUERY('...' RETURNING CONTENT) FROM DUAL
结果总是在包含 SQLXML 字段的单行单列中串联返回。
这对于返回元素序列的查询是不利的,对于返回文本节点序列的查询来说非常讨厌。
有没有办法避免这种连接并为每个返回的项目获取一行?
谢谢,
埃里克
您想使用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
为了详细说明 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>
这正是我想要的。