oracle如何修改xmltype数据里的标签值

业务老师给我提了个需求,要修改xmltype里的标签值,开写

update table
set xmlcolumn = xmlserialize(content updateXML(UpdateXML(
xmltype(xmlcolumn,871),  '//@faSong', fasongstring)
                    ,'//@jieShou', jieshoustring) as blob ) 
where CODE = mycode;

这个代码是用来修改xml里的两个标签值的,一个是fasong,一个是jieshou,直接@fasong和@jieshou,就能够定位这两个属性值,要是出现多个就,得写绝对路径了,gg。。

将fasong标签的值改成fasongstiring,jieshou也是,使用updatexml函数修改,由于要改两个直接套两个函数。

最里层的xmltype函数,则是将本来以blob存贮的xml文本转换成xmltype类型,才能进行后续的updatexml。

最后再用xmlserialize()函数将修改好的xml数据从xmltype转成blob以update。

但是但是,这里会有编码问题,xmlserialize默认的是gbk编码,可是我的xml脚本都是utf-8的,所以会冲突,那这代码执行commit会有啥结果呢??

结果就是,只能update一次,后续不能用此sql再对xml进行修改。。。

就因为原本是utf8的xml,因为使用了xmlserialize,而被改成gbk。二次修改,mmm,我搞不清这逻辑。。

折腾了一天,得出修改方案:

update table
set xmlcolumn = xmlserialize(content updateXML(UpdateXML(
xmltype(xmlcolumn,871),  '//@faSong', fasongstring)
                    ,'//@jieShou', jieshoustring) as blob ENCODING 'utf-8') 
where CODE = mycode;

xmlserialize加一个参数就好了ENCODING 'utf-8',意思估计就是以utf8的编码格式将xml转成blob吧。

解决,可以对同一对象update多次了。

这个问题真的太少遇见了,记录一下。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值