次のようなサンプルコードがあります。
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 columnが null でないときはいつでも、とx
の値を null に置き換えることです。クエリで使用した関数も同じです。/node_root/node_2
/node_root/node_3
/node_root/node_4
Updatexml
SELECT
ここでの問題はUpdatexml
、Oracle 12c では機能しないことです。これが、サブクエリで使用した理由でありXmltable
、データのフィルタリングには完璧に機能しますが、ノード値を null に置き換えることはできません。
Oracle Docs for XQueryを調べてみましたが、ノード値の置換にどのように役立つか理解できませんでした。
わかりやすい例を教えてください。