Oracle
 sql >> Base de données >  >> RDS >> Oracle

Analyser xmltype dans la table après pivot xml

Vous pouvez obtenir la valeur du pays avec cette expression XPath :

/PivotSet/item/column[@name="country"]

Et un semblable pour la population. Donner :

with x as (
  select xmltype ( 
'<PivotSet>
<item>
        <column name = "country">Ukraine</column>
        <column name = "population">12345</column>
    </item>
    <item>
        <column name = "country">Germany</column>
        <column name = "population">67891</column>
    </item>
</PivotSet>' 
) x from dual
)
select xt.* from x, xmltable (
  '/PivotSet/item'
  passing x.x 
  columns 
    country varchar2(100) 
      path 'column[@name="country"]',
    population int
      path 'column[@name="population"]'
) xt

COUNTRY   POPULATION   
Ukraine        12345         
Germany        67891     

Mais si vous voulez une colonne pour chaque pays, à partir de là, vous devez toujours pivot les données pour obtenir le résultat !

Ce qui soulève la question :

Pourquoi utiliser un pivot XML ?

Si c'est parce que vous ne connaissez pas les noms des pays et que vous faites quelque chose comme :

pivot xml ( 
  min ( population ) 
    for country in ( any ) 
)

Cela ne vous a rien épargné ! Vous devez toujours connaître les noms des pays pour obtenir la sortie sous forme de colonnes.