Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Analysieren Sie xmltype nach Pivot-XML in die Tabelle

Sie können den Länderwert mit diesem XPath-Ausdruck erhalten:

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

Und ein ähnliches für die Bevölkerung. Geben:

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     

Aber wenn Sie eine Spalte für jedes Land wollen, müssen Sie von hier aus immer noch pivot die Daten, um das Ergebnis zu erhalten!

Was die Frage aufwirft:

Warum einen XML-Pivot verwenden?

Wenn es daran liegt, dass Sie die Ländernamen nicht kennen und so etwas tun:

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

Das hat dir nichts gespart! Sie müssen noch die Ländernamen kennen, um die Ausgabe als Spalten zu erhalten.