我有一个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还没有。
答案 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