替换或更新XML中的文本

时间:2017-11-29 21:24:11

标签: xml oracle

我有一个包含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)

1 个答案:

答案 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)