Oracle 11g:XQuery 结果在单个 SQLXML 类型中连接



当我在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>

这正是我想要的。

最新更新