sql >> Base de Datos >  >> RDS >> Oracle

Analizar xmltype en la tabla después de pivotar xml

Puede obtener el valor del país con esta expresión XPath:

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

Y otro similar para la población. Dando:

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     

Pero si desea una columna para cada país, desde aquí aún necesita pivot los datos para obtener el resultado!

Lo que plantea la pregunta:

¿Por qué usar un pivote XML?

Si es porque no sabe los nombres de los países y está haciendo algo como:

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

¡Esto no te ha ahorrado nada! Todavía necesita conocer los nombres de los países para obtener el resultado como columnas.