我正在努力学习Oracle XML学习曲线。 我有一个XML文档,主要包含任何级别的“错误/文本”元素。我想查询doc并将每条错误消息的文本作为自己的记录。在我到目前为止的尝试中,文本被连接成一个记录。 我怎样才能将它们记录在自己的记录中? 谢谢。
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_
答案 0 :(得分:0)
首先,我想如果你将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
)
/
答案 1 :(得分:0)
使用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.
的问候,
罗布。