2012-04-30 67 views
0

我正在使用Oracle XML學習曲線。 我有一個XML文檔,主要包含任何級別的「錯誤/文本」元素。我想查詢文檔並將每條錯誤消息的文本作爲自己的記錄。在我迄今爲止的嘗試中,文本被連接在一起成爲一個記錄。 我怎樣才能讓他們在自己的記錄? 謝謝。Oracle XMLtype查詢

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

抱歉不明白你的問題,你能告訴我們當前和預期的結果 – psaraj12

回答

0

起初我還以爲,如果你把改變了XPath表達式

它會做你想要什麼,但事實並非如此。以下稍微調整的代碼會給你你想要的。如果你想開始做很多與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 
    ) 
/
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. 

問候,
羅布。