我有一个Oracle数据库,其中有一个XML字段。假设我在表“Party”中有以下字段:
日期时间客人餐
Meal是一个XML字段。当我查询该字段时,可以看到以下内容:
<table name="dinner">
<row id="1">
<field name="main">steak</field>
<field name="side">potatoes</field>
<field name="dessert">cake</field>
</row>
</table>
如何设置一个SQL查询,使其将这些单独的XML字段名和值作为单独的列输出。因此,我希望我的输出是:
日期时间客人主侧甜点
我已经研究过XMLQUERY,但是所有给出的例子都涉及到像<Vendor></Vendor>
这样的节点名,而不是<field name = "Vendor"></field>
。
1条答案
按热度按时间klh5stk11#
您可以使用XMLTable一次提取多个值,例如:
fiddle
主XPath获取每个
row
节点,column子句获取具有匹配属性的field
值,使用@name="..."
进行匹配。例如,
'field[@name="main"]'
路径正在查找一个名为field
的节点,该节点具有一个名为name
的属性,该属性的值为main
,并给出该节点的值。在您的示例中,该值为'steak'。你说
meal
是“一个XML字段”,所以我假设该列(不是字段)的数据类型是XMLType。如果它实际上是一个字符串(varchar 2或CLOB),那么passing
子句将更改为passing XMLType(p.meal)
以将其转换为该类型。(我已经稍微简化为一个日期列,部分原因是除非它是一个带引号的标识符,否则你不能有一个名为日期的列,但主要是因为Oracle日期总是有一个时间组件,所以尝试单独存储日期和时间通常没有意义。当然,你仍然可以在结果集中将单个值格式化为两列。)
您可以在文档中阅读更多关于XMLTable和使用SQL和PL/SQL查询XML数据的内容。