2

当我使用 PL-SQL 运行 XQuery 查询时

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

结果总是在包含 SQLXML 字段的单行单列中串联返回。

这对于返回元素序列的查询是不利的,对于返回文本节点序列的查询来说非常讨厌。

有没有办法避免这种连接并为每个返回的项目获取一行?

谢谢,

埃里克

4

2 回答 2

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
于 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 回答