我有一些示例代码如下:
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;
我的要求是,只要/node_root/node_1
in 列不为空,则将和x
的值替换为空。我在查询中使用的函数也是如此。/node_root/node_2
/node_root/node_3
/node_root/node_4
Updatexml
SELECT
这里的问题是Updatexml
在 Oracle 12c 中不起作用。这就是为什么我Xmltable
在子查询中使用它并且它在过滤数据方面非常有效,但我无法用 null 替换节点值。
我尝试查看Oracle Docs for XQuery,但无法理解它如何有助于替换节点值。
请提供一个描述性的例子。