在枢轴 xml 之后将 xml 类型解析为 table

Parse xmltype into table after pivot xml

我在枢轴 xml 之后有 return 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>

我需要 table 看起来像

Ukraine_population|Germany_population|...

12345             |67891             |...

您可以使用此 XPath 表达式获取国家/地区值:

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

和一个类似的人口。给予:

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     

但是如果您想要每个国家/地区的列,您仍然需要从这里 pivot 数据以获得结果!

这引出了问题:

为什么要使用 XML 枢轴?

如果是因为您不知道国家/地区的名称而正在做类似的事情:

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

这并没有为您节省任何东西!您仍然需要知道国家/地区名称才能将输出作为列。