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

时间:2012-05-19 07:47:19

标签: sql oracle xquery xmltype xmltable

当我使用

在PL-SQL中运行XQuery查询时
 SELECT XQUERY('...' RETURNING CONTENT) FROM DUAL

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

这对于返回元素序列的查询很糟糕,对于返回文本节点序列的查询来说真的很讨厌。

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

谢谢,

埃里克

2 个答案:

答案 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>

这正是我正在寻找的。