Oracle更新XML字段内容,请高手帮忙,谢谢了!

clerkie 2017-10-12 11:32:17
我有表A,其中有一个XML字段名为Distributiondept,比如它的XML内容是:
<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<string>B</string>
<string>C</string>
<string>D</string>
<string>E</string>
</ArrayOfString>

我想将其中的“B”更新为“BBB”,但是不得门而入,我用
UPDATE A
SET A.Distributiondept = UPDATEXML(A.Distributiondept,
'/ArrayOfString/string/text()',
'BBB')

更新成功倒是成功了,它将4个字符串都更新为“BBB"了,请问高手有什么办法只将”B“更新为”BBB“吗?在线等,谢谢!
...全文
555 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
clerkie 2017-10-17
  • 打赏
  • 举报
回复
引用 2 楼 qq646748739 的回复:

--1.建立含有xmltype数据类型的表
--声明xmltype型字段用sys.xmltype 
create table a (distributiondept sys.xmltype);

--2.向带有xmltype类型的表插入带有数据
--插入用 sys.xmlType.createXML
insert into a (distributiondept) values (sys.xmlType.createXML('<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <string>B</string>
  <string>C</string>
  <string>D</string>
  <string>E</string>
</ArrayOfString>') );

--3.查询数据
select  i.distributiondept.extract('//ArrayOfString/string/text()').getStringVal() as truename from a i
select  i.distributiondept.extract('//ArrayOfString/string[1]/text()').getStringVal() as truename from a i

--4执行更新
update  a
       set a.distributiondept = updatexml(a.distributiondept, '/ArrayOfString/string[1]/text()', 'BBB');
commit;

--5.查询更新后的数据
select  i.distributiondept.extract('//ArrayOfString/string[1]/text()').getStringVal() as truename from a i
更新后的值为BBB, 说明已经更新成功。
非常感谢高手的指点,但是这个”B“值的位置其实不固定的,不能恒定地使用string[1]来更新,有没有更好的办法?再次感谢!
碧水幽幽泉 2017-10-12
  • 打赏
  • 举报
回复
经过不断测试,上述方法是可行的。 可以此楼结贴,哈哈!
碧水幽幽泉 2017-10-12
  • 打赏
  • 举报
回复

--1.建立含有xmltype数据类型的表
--声明xmltype型字段用sys.xmltype
create table a (distributiondept sys.xmltype);

--2.向带有xmltype类型的表插入带有数据
--插入用 sys.xmlType.createXML
insert into a (distributiondept) values (sys.xmlType.createXML('<ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<string>B</string>
<string>C</string>
<string>D</string>
<string>E</string>
</ArrayOfString>') );

--3.查询数据
select i.distributiondept.extract('//ArrayOfString/string/text()').getStringVal() as truename from a i
select i.distributiondept.extract('//ArrayOfString/string[1]/text()').getStringVal() as truename from a i

--4执行更新
update a
set a.distributiondept = updatexml(a.distributiondept, '/ArrayOfString/string[1]/text()', 'BBB');
commit;

--5.查询更新后的数据
select i.distributiondept.extract('//ArrayOfString/string[1]/text()').getStringVal() as truename from a i

更新后的值为BBB, 说明已经更新成功。
碧水幽幽泉 2017-10-12
  • 打赏
  • 举报
回复
我改了下,你执行下试试看:

UPDATE A
       SET A.Distributiondept = UPDATEXML(A.Distributiondept,
                '/ArrayOfString/string[1]/text()',
                 'BBB');

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧