Prova detta:
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
Eftersom du har flera tillstånd bör du gå med i en annan xml-tabell. Eftersom vissa länder inte har några stater måste det vara en vänster yttre sammanslutning. Jag använder den gamla metoden (+)
eftersom jag provar detta på 10g och det verkar vara ett problem att använda left outer join
i 10g men tydligen borde det vara bra i 11g
.