【发布时间】:2014-01-27 18:13:51
【问题描述】:
我有一些示例代码如下:
WITH xtbl AS
(SELECT 1 AS xtbl_id,
xmltype ('<node_root>
<node_1>12</node_1>
<node_2>233</node_2>
<node_3>223</node_3>
<node_4>234</node_4>
</node_root>') AS x
FROM Dual
UNION ALL
SELECT 2, xmltype ('<node_root>
<node_1></node_1>
<node_2>233</node_2>
<node_3>223</node_3>
<node_4>234</node_4>
</node_root>')
FROM Dual)
SELECT xtbl_id,
x,
Updatexml (x,
'/node_root/node_2',
NULL,
'/node_root/node_3',
NULL,
'/node_root/node_4',
NULL)
AS xcol
FROM xtbl
WHERE (SELECT node_1
FROM Xmltable ('node_root'
PASSING x
COLUMNS node_1 INTEGER PATH 'node_1'))
IS NOT NULL;
我的要求是,只要x 列中的/node_root/node_1 不为空,则将/node_root/node_2、/node_root/node_3 和/node_root/node_4 的值替换为空。我在SELECT 查询中使用的Updatexml 函数也是如此。
这里的问题是Updatexml 在 Oracle 12c 中不起作用。这就是我在子查询中使用Xmltable 的原因,它在过滤数据方面非常有效,但我无法用 null 替换节点值。
我尝试查看 XQuery 的 Oracle Docs,但不明白它对替换节点值有何帮助。
请提供一个描述性示例。
【问题讨论】:
标签: sql xml oracle xquery oracle12c