Spróbuj tego:
select X.COUNTRYNAME, Y.STATENAME
from XMLTEMP
,xmltable('/countries/country'
passing MYDOC
columns COUNTRYNAME varchar2(20) path './name',
STATES xmltype path './states') X,
xmltable('/states/state/name' passing X.STATES
columns STATENAME varchar2(20) path '.') (+) Y
Ponieważ masz wiele stanów, powinieneś dołączyć do innej tabeli XML. Ponieważ niektóre kraje nie mają stanów, musi to być lewe sprzężenie zewnętrzne. Używam starej metody (+)
ponieważ próbuję tego na 10g i wygląda na to, że jest problem z użyciem left outer join
w 10g, ale najwyraźniej powinno być w porządku w 11g
.