XMLtable с Oracle 11g

Вот пример таблицы:

create table xmltemp (mydoc xmltype)

Вот небольшой xml-документ для нее:

insert into xmltemp values (
xmltype
('<?xml version="1.0"?>
<countries>
  <country>
    <name>Canada</name>
  </country>
  <country>
    <name>US</name>
    <states>
      <state>
        <name>Washington</name>
        <name>Oregon</name>        
      </state>
    </states>
  </country>
</countries>
')
)  

Обратите внимание, что в Канаде нет элемента «состояния», но есть в США. Я пытаюсь получить эти результаты запроса (порядок и форматирование не важны):

Canada,
US,Washington
US,Oregon

Когда я выполняю это, я вижу в результате и Канаду, и США:

select
countryname
from xmltemp,
xmltable('/countries/country' passing mydoc
   columns countryname varchar2(10) path 'name') 

Когда я делаю это, я получаю оба состояния :

select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
   columns statename   varchar2(20) path '.') c

Я пробовал это, чтобы получить и страну, и штат, но похоже, что Oracle не нравится синтаксис '..':

select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
   columns statename   varchar2(20) path '.',
           countryname varchar2(20) path '../../../name') c

Вот ошибка:

ORA-19110: unsupported XQuery expression

Когда я пробую это, я получаю 'multi-item 'ошибка из-за двух состояний:

select
countryname,
statename
from xmltemp,
xmltable('/countries/country' passing mydoc
   columns countryname varchar2(10) path 'name',
           statename   varchar2(20) path 'states/state/name') c

Вот эта ошибка:

ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton 
sequence - got multi-item sequence

Какой запрос даст мне желаемый результат:

Canada,
US,Washington
US,Oregon

Спасибо

5
задан John Doyle 17 February 2012 в 04:25
поделиться