0

私は、Oracle XML の学習曲線を上っていく作業をしています。任意のレベルで「エラー/テキスト」要素をメインに含む XML ドキュメントがあります。ドキュメントをクエリして、各エラー メッセージのテキストを独自のレコードとして取得したいと考えています。これまでの試みでは、テキストは 1 つのレコードに連結されます。どうすればそれらを独自の記録に入れることができますか? ありがとうございました。

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 に答える