Prova questo:
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
Poiché hai più stati, dovresti unirti a un'altra tabella xml. Poiché alcuni paesi non hanno stati, deve essere un'unione esterna di sinistra. Sto usando il vecchio metodo di (+)
dato che lo sto provando su 10g e sembra che ci sia un problema usando left outer join
in 10g ma a quanto pare dovrebbe andare bene in 11g
.