Prueba esto:
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
Debido a que tiene varios estados, debe unirse a otra tabla xml. Como algunos países no tienen estados, debe ser una unión externa izquierda. Estoy usando el antiguo método de (+)
ya que estoy intentando esto en 10g y parece que hay un problema al usar left outer join
en 10g pero aparentemente debería estar bien en 11g
.