XMLtable avec Oracle 11g

Voici un exemple de table:

create table xmltemp (mydoc xmltype)

Voici un petit document xml:

insert into xmltemp values (
xmltype
('<?xml version="1.0"?>
<countries>
  <country>
    <name>Canada</name>
  </country>
  <country>
    <name>US</name>
    <states>
      <state>
        <name>Washington</name>
        <name>Oregon</name>        
      </state>
    </states>
  </country>
</countries>
')
)  

Avis que le Canada n'a pas d '"états" de l'élément, mais le NOUS ne.
Je vais essayer d'obtenir ces résultats de la requête (l'ordre et la mise en forme n'est pas important):

Canada,
US,Washington
US,Oregon

Lorsque j'exécute ça, je vois à la fois le Canada et les états-unis dans le résultat:

select
countryname
from xmltemp,
xmltable('/countries/country' passing mydoc
   columns countryname varchar2(10) path 'name') 

Quand je fais cela, je reçois à la fois aux états-unis:

select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
   columns statename   varchar2(20) path '.') c

J'ai essayé d'obtenir les deux pays et les états, mais il semble que oracle n'aime pas le '..' syntaxe:

select
statename
from xmltemp,
xmltable('/countries/country/states/state/name' passing mydoc
   columns statename   varchar2(20) path '.',
           countryname varchar2(20) path '../../../name') c

Voici l'erreur:

ORA-19110: unsupported XQuery expression

Quand j'ai essayer ceci, j'obtiens le "multi-élément' erreur parce que deux états:

select
countryname,
statename
from xmltemp,
xmltable('/countries/country' passing mydoc
   columns countryname varchar2(10) path 'name',
           statename   varchar2(20) path 'states/state/name') c

Ici est que l'erreur:

ORA-19279: XPTY0004 - XQuery dynamic type mismatch: expected singleton 
sequence - got multi-item sequence

Ce qui est une requête qui va me faire mon choix de sortie:

Canada,
US,Washington
US,Oregon

Grâce

OriginalL'auteur John | 2012-02-17