【发布时间】:2019-07-08 13:50:53
【问题描述】:
我想替换 XML 中节点的值。 XML 存储在 Oracle 12.2 数据库中的 XMLTYPE 列中。 我的 XML:
<Warehouse>
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
</Warehouse>
UPDATEXML 函数可以完成这项工作,但速度很慢。
select
UPDATEXML(myxmlcolumn, '/Warehouse/Building/text()','mynewvalue')
from mytable;
Oracle 说 UPDATEXML 是 deprecated,而应该使用 XMLQUERY。 所以,我尝试了 XMLQUERY:
select
XMLQUERY(
'copy $t := $x modify(
replace value of node $t/Warehouse/Building with "mynewvalue"
) return $t'
from mytable;
它工作快得多,但有一个小问题:如果请求的节点不存在,它会失败并显示 XVM-01155:[XUDY0027] Invalid target expression
例如,此选择失败并出现上述错误(注意 ZZZ 假节点名称):
select
XMLQUERY(
'copy $t := $x modify(
replace value of node $t/Warehouse/ZZZ with "mynewvalue"
) return $t'
from mytable;
问题: 如何更改代码以忽略不存在的节点?
【问题讨论】: