为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM V8 1-2-38 ENT
【操作系统】:Centos 7
【CPU】: x86
【问题描述】*:达梦8中XML数据处理如何实现类似Oracle的updatexml更新表中xml数据的功能
已经尝试过使用先删除后插入的方式,但是插入失败,操作过程如下:
比如要更新emplid=“1111” 的email节点数据。
(1)创建测试表并插入数据:
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)删除emplid="1111"的email数据
update EMPLOYEES set DATA=deletexml(DATA,‘//Employees/Employee[@emplid=“1111”]/email’);
(3)查看emplid="1111"的数据
SELECT XMLQUERY(DATA,‘//Employees/Employee[@emplid=“1111”]’) from EMPLOYEES;
(4)插入email数据,报错
update EMPLOYEES set DATA=insertchildxml(DATA,‘//Employees/Employee[@emplid=“1111”]’,‘email’,xmltype(‘<email>test@abc.com<email>’));
commit;
已解决,插入语句语法有问题。正确应该为:
update EMPLOYEES set DATA=insertchildxml(DATA,‘//Employees/Employee[@emplid=“1111”]’,‘email’,xmltype(‘<email>test@abc.com</email>’));