0

我正在努力提高 Oracle XML 学习曲线。我有一个主要包含任何级别的“错误/文本”元素的 XML 文档。我想查询文档并将每条错误消息的文本作为自己的记录。到目前为止,在我的尝试中,文本被连接在一起形成一个记录。我怎样才能让它们出现在他们自己的记录中?谢谢你。

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_
4

2 回答 2

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
      )
/ 
于 2012-05-01T14:32:20.953 回答
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.

问候,
罗布。

于 2012-05-01T14:49:45.913 回答