Oracle
 sql >> Database >  >> RDS >> Oracle

Analizza il tipo xml nella tabella dopo il pivot xml

Puoi ottenere il valore del paese con questa espressione XPath:

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

E uno simile per la popolazione. Dare:

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     

Ma se vuoi una colonna per ogni paese, da qui devi ancora pivot i dati per ottenere il risultato!

Il che pone la domanda:

Perché utilizzare un pivot XML?

Se è perché non conosci i nomi dei paesi e stai facendo qualcosa del tipo:

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

Questo non ti ha salvato nulla! Devi ancora conoscere i nomi dei paesi per ottenere l'output come colonne.