我有一些示例代碼如下:修改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