Tente isto:
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
Como você tem vários estados, deve juntar-se a outra tabela xml. Como alguns países não têm estados, então precisa ser uma junção externa esquerda. Estou usando o método antigo de
(+)
como estou tentando isso em 10g e parece que há um problema ao usar left outer join
em 10g, mas aparentemente deve ficar bem em 11g
.