Вот пример таблицы:
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
Я пытался получить и страну, и штат, но, похоже, оракулу не нравится синтаксис '..':
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
Спасибо