我有一个包含XML数据的列。
SELECT roll_id, EXTRACT (xml_data, '/root/xmldata/empid') AS empid
FROM employee_data
WHERE roll_id IN (1, 2)
结果:
roll_id empid
1 <empid>A11</empid>
2 <empid/>
如果我在更新查询下运行,它只更新roll_id 1.它不会影响roll_id 2.有人可以建议我如何更新roll_id 2吗?我应该为roll_id运行替换吗?
UPDATE employee_data
SET xml_data =
UPDATEXML (xml_data
,'/root/xmldata/empid/text()'
,'111')
WHERE roll_id IN (1,2)
答案 0 :(得分:1)
从xpath中删除text()。
.../empid/text()
- 你正在寻找文本节点的empid。
... / empid` - 你正在寻找empid。
UPDATE employee_data
SET xml_data =
UPDATEXML (xml_data
,'/root/xmldata/empid'
,'111')
WHERE roll_id IN (1,2)
请注意。从Oracle 11.2中不推荐使用updatexml
和其他xml修改方法。你应该使用。
update employee_data
set xml_data = xmlquery('copy $d := .
modify (
for $i in $d/root/xmldata/empid
return (
replace value of node $i with "111"
)
)
return $d' passing xml_data returning content) where roll_id IN (1,2)