我有一些示例代码如下:修改XML节点值 - 如updateXML相当于甲骨文12C
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
在x
列不为空,则替换值/node_root/node_2
,/node_root/node_3
和/node_root/node_4
为空。我在我的SELECT
查询中使用的Updatexml
函数也一样。
这里的问题是Updatexml
在Oracle 12c中不起作用。这就是我在子查询中使用Xmltable
的原因,它在过滤数据方面非常完美,但我无法用null替换节点值。
我试着在Oracle Docs看XQuery,但不明白它如何可以有助于取代节点值。
请提供一个描述性示例。
第一个代码示例工作在11gR2以及12c。第二个和第三个例子仅在12c工作。谢谢! – Rachcha
这很奇怪,因为我测试了所有针对11.2.0.3版Oracle的变体。你能否发布你的Oracle的确切版本(例如'select * from v $ version')? – ThinkJet
有两个 - 11.2.0.1.0和12.1.0.1.0,都是64bit。 – Rachcha