2012-04-30 4 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. 

С уважением,
Роб.