我正在努力学习Oracle XML的学习曲线。我有一个XML文档,它在任何级别都包含一个'Error/Text‘元素。我想查询文档并获取每个错误消息的文本作为其自己的记录。到目前为止,在我的尝试中,文本被连接在一起成为一个记录。我怎样才能把他们放入他们自己的记录中?谢谢。
with xmldoc_ as (
SELECT xmltype('
<B>
<A>
<Error><Text>Error #1</Text></Error>
</A>
<C>
<D>
<Error><Text>Error #2</Text></Error>
</D>
</C>
</B>
') object_value from dual)
select
XMLcast(
XMLquery('//Error/Text' passing object_value returning content)
as varchar2(200)
) message
from xmldoc_发布于 2012-05-01 22:32:21
一开始我想如果你把XPath表达式改成
//Error[1]/Text它会做你想要的,但它没有。下面稍微调整的代码会给你你想要的。如果您想开始做大量与XMLTYPE相关的事情,最好阅读XML开发人员指南,因为Oracle可以用XML做很多事情。
with XML as
(select xmltype(
'<B>
<A>
<Error><Text>Error #1</Text></Error>
</A>
<C>
<D>
<Error><Text>Error #2</Text></Error>
</D>
</C>
</B>') as OBJECT_VALUE from dual
)
select column_value
from XML,
XMLTABLE
(
'//Error/Text/text()'
passing OBJECT_VALUE
)
/ 发布于 2012-05-01 22:49:46
通过使用XMLTable
SQL> with xmldoc_ as
2 ( SELECT xmltype
3 ( '<B>
4 <A>
5 <Error>
6 <Text>Error #1</Text>
7 </Error>
8 </A>
9 <C>
10 <D>
11 <Error>
12 <Text>Error #2</Text>
13 </Error>
14 </D>
15 </C>
16 </B>'
17 ) object_value
18 from dual
19 )
20 select text
21 from xmldoc_
22 , xmltable
23 ( '//Error'
24 passing object_value
25 columns text varchar2(20) path 'Text'
26 )
27 /
TEXT
--------------------
Error #1
Error #2
2 rows selected.致以敬意,
罗伯。
https://stackoverflow.com/questions/10390763
复制相似问题