字符串中的“→”导致错误“在SQL/XML表达式中发现非法的XML字符001 A”(DB2)

rkue9o1l  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(381)

我需要从我的数据库中合并多个行,为此我需要去掉一些特定的字符。我使用以下代码:

REPLACE(
        (CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
              CONCAT(RTNTXT.LIN_TX,'')
                                         )
                                 ) AS CLOB(10024)
                          ) AS VARCHAR(402)
             )
        ),'
',''
        )  AS NARRATIVE

一旦在任何<mystring>记录中我有符号→,我的查询就会显示关于非法XML字符001A的警告。
我尝试使用一些谷歌建议和转换代码:

REPLACE(
        (CAST(XMLSERIALIZE(XMLAGG(XMLTEXT(
              CONCAT(RTNTXT.LIN_TX,'')
                                         )
                                 ) AS CLOB(10024)
                          ) AS VARCHAR(402)
             )
        ),x'1A',''
        )  AS NARRATIVE

但是错误仍然存在。
你能告诉我我可以修改语法使它工作吗?

ccrfmcuu

ccrfmcuu1#

您必须先从字串中移除不合法的XML字符,**才能将它传递给XML函式。
请考虑以下示例。如果取消注解掉的字符串的注解,则会得到SQLCODE=-20377以及您提到的类似文本。请注意,'→'字符没有问题。问题在于x '1A'字符。

WITH MYTAB (LIN_TX) AS 
(
VALUES 
  'abc→abc'
, 'xyz' || x'1a' || 'xyz'
)
SELECT
  XMLSERIALIZE (XMLAGG (XMLTEXT (REGEXP_REPLACE (LIN_TX, '\x1A', ''))) AS VARCHAR (402)) AS CORRECT
--, XMLSERIALIZE (XMLAGG (XMLTEXT (LIN_TX)) AS VARCHAR (402)) AS INCORRECT
FROM MYTAB

相关问题