Вот пример таблицы:
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
Спасибо