IBM DB2 XML列更新并恢复为null

IBM DB2 XML列更新并恢复为null,xml,db2,Xml,Db2,我有一个名为employee(id号,deatils XML)的表,deatils列可以为空 假设我插入了以下数据 insert into employee(1, '<xml><employee><name>Foo</name></employee></xml>'); insert into employee(2, null); insert into employee(3, '<xml><employee

我有一个名为
employee(id号,deatils XML)
的表,deatils列可以为空

假设我插入了以下数据

insert into employee(1, '<xml><employee><name>Foo</name></employee></xml>');
insert into employee(2, null);
insert into employee(3, '<xml><employee><name>Bar</name></employee></xml>');
插入员工(1,'Foo');
插入员工(2,空);
插入员工(3个“栏”);
我有一个IBMOptim工具,它有一个已知的bug,由于第二行为null,它不会将这些数据复制/恢复到其他模式中。提取时,数据将被很好地提取,但插入到其他模式将失败

解决方法是用一些伪xml更新空值,插入数据,并在traget数据库中用空xml替换该伪xml。我需要db2查询来完成这项工作

我在做什么

update employee set details='<xml></xml>' where details=null;
updateemployee set details='',其中details=null;
在这个更新之后,我可以提取数据并插入到目标中,但是当我尝试更新虚拟xml时,我会出错

让我们假设我已经尝试了下面的方法(这是行不通的)

updateemployee set deatils=null,其中details='';
基本上,由于xml存储为clob,db2无法找到任何带有my where子句的记录

请帮忙

请研究这个或这些。你需要

update employee set details=xmlparse(document('<xml></xml')) where details=null;

请注意,XML列不是CLOB。它们是专门的列,您必须使用新的函数和命令来处理它们。此外,请定义可以深入文档结构的适当XML索引,并且永远不要将XML转换为WHERE子句的普通varchar字符串(这将立即破坏性能)。

null在XML中不存在。相反,您有一个“空序列”。您可以使用fn:boolean测试空序列。因此,如果您查找一名员工,但未找到该员工,则可以将这些记录替换为null

大概是这样的:

UPDATE yourtable, XMLTABLE('$d/xml' passing details as "d"
   COLUMNS 
      empIsNull PATH 'if (fn:boolean(/xml/employee) then 0 else 1' ) as XMLINFO
SET yourtable.details = null
WHERE XMLINFO.empIsNull = 1

而不是
updateemployee set details=xmlparse(文档
xquery db2-fn:xmlcolumn('employee')/xml;
UPDATE yourtable, XMLTABLE('$d/xml' passing details as "d"
   COLUMNS 
      empIsNull PATH 'if (fn:boolean(/xml/employee) then 0 else 1' ) as XMLINFO
SET yourtable.details = null
WHERE XMLINFO.empIsNull = 1