暂无图片
暂无图片
暂无图片
暂无图片
1
暂无图片

达梦数据库表中XML数据的删除插入简单测试

原创 LeeWen2020 2021-08-17
1705

  由于达梦数据库V8当前版本中还未兼容Oracle中updatexml的功能,所以无法像Oracle那样直接使用updatexml()来更新xml中的数据,但是达梦数据库目前已经兼容了detelexml、insertchildxml等函数,可以通过先删除后插入xml节点数据实现类似Oracle updatexml的功能。具体语法用法和Oracle的语法没有太大差别,可以参考《DM8 SQL语言使用手册》附录3中的"XML章节"。

环境介绍

DB Version:DM V8 1-2-46-ENT

OS Version:KylinV10

测试示例

1、需求说明

  更新EMPLOYEES表中C1列中XML数据中的emplid="1111"的email数据。

2、创建测试表并插入数据

Create TABLE EMPLOYEES ( id NUMBER, data XMLTYPE ); Insert INTO EMPLOYEES VALUES (1, xmltype ('<Employees> <Employee emplid="1111" type="admin"> <firstname>John</firstname> <lastname>Watson</lastname> <age>30</age> <email>johnwatson@sh.com</email> </Employee> <Employee emplid="2222" type="admin"> <firstname>Sherlock</firstname> <lastname>Homes</lastname> <age>32</age> <email>Sherlock@sh.com</email> </Employee> <Employee emplid="3333" type="user"> <firstname>Jim</firstname> <lastname>Moriarty</lastname> <age>52</age> <email>jim@sh.com</email> </Employee> <Employee emplid="4444" type="user"> <firstname>Mycroft</firstname> <lastname>Holmes</lastname> <age>41</age> <email>mycroft@sh.com</email> </Employee> </Employees>')); COMMIT;
复制

2、删除表中XML数据中emplid="1111"的email数据

update EMPLOYEES set DATA=deletexml(DATA,'//Employees/Employee[@emplid="1111"]/email'); COMMIT;
复制

3、查看emplid="1111"的数据

SELECT XMLQUERY(DATA,'//Employees/Employee[@emplid="1111"]') from EMPLOYEES;
复制

image-20210816183052972

可以看到emplid="1111"下面的email节点数据已经被删除了。

4、emplid="1111"中插入新的email数据

update EMPLOYEES set DATA=insertchildxml(DATA,'//Employees/Employee[@emplid="1111"]','email',xmltype('<email>test@abc.com</email>')); COMMIT;
复制

5、查看emplid="1111"的数据

SELECT XMLQUERY(DATA,'//Employees/Employee[@emplid="1111"]') from EMPLOYEES;
复制

image-20210816183440764

可以看到新的数据已经插入。

更多资讯请上达梦技术社区了解:https://eco.dameng.com

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

手机用户4992
暂无图片
1年前
评论
暂无图片 0
deletexml、insertchildxml这些方法都是自己定义得吧?我看达梦数据库是没有自带这些方法?
1年前
暂无图片 点赞
评论