Essayez ceci :
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
Parce que vous avez plusieurs états, vous devez vous joindre à une autre table xml. Comme certains pays n'ont pas d'états, il doit s'agir d'une jointure externe gauche. J'utilise l'ancienne méthode de (+)
comme j'essaie ceci sur 10g et il semble qu'il y ait un problème en utilisant left outer join
en 10g mais apparemment ça devrait aller en 11g
.