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.