Oracle XMLtype查询

时间:2012-04-30 21:22:12

标签: xml oracle

我正在努力学习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_

2 个答案:

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

的问候,
罗布。