如何将包含XML的旧DB2 DB2记录合并到新的XML列中

时间:2018-01-30 15:48:45

标签: xml db2

我有一个DB2表,其中存储了多个xml的xml作为char(254)。每行不一定是有效的XML,但所有行一起构成有效的文档。我们目前将所有记录都放入我们的Java应用程序中,构建XML文档然后用它做各种事情。

我想从现有表中获取现有数据,并使用XML数据类型将其合并到一个新表中的一个记录(每个键),以便我可以使用一些较新的xml查询功能。

我首先创建了一个select语句,它将使用XMLAGG(XMLTEXT(列))返回我需要的数据,但这会转义已经在列中的xml节点。当我尝试使用此select语句的结果插入时,我得到一个SQLCODE 20345无效的XML。

我当然可以把它拉成java并且将它转换为unescape它,但是由于涉及的记录数量,我想在select insert语句中完成所有操作。

似乎应该有办法做到这一点,但我找不到它。

我们使用的是DB2 11版,LISTAGG还没有。

1 个答案:

答案 0 :(得分:0)

我认为XMLTEXT正在做的不是你需要的东西。我认为它用于在XML文档中构造XML文本节点。如果我理解正确,你想构建一个查询,将几个char行连接成一个文本值,然后将其转换为XML文档。您应该能够使用XMLPARSE()将XML指定为目标类型,如下所示:

SELECT 
    XMLCAST(XMLQUERY('string(/a/b/@foo)' PASSING X) AS VARCHAR(20)) 
FROM (
    SELECT xmlparse('<a><b foo="bar"/><c/></a>')
    FROM sysibm.sysdummy1
) AS X(X)

了解更多信息: How to convert xml text stored in a VARCHAR and select using XQUERY expression