You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2使用XMLAGG拼接行遇→字符报001A非法XML字符错误如何解决

错误原因

你当前的替换逻辑是在XML序列化拼接完成后才执行,但报错发生在XMLTEXT()函数执行阶段:XML处理器在解析输入文本时,就已经识别到不允许的控制字符0x1A直接抛出异常,后续的REPLACE逻辑根本没有执行机会。

修正方案

将非法字符的清理逻辑提前,在把字段内容传入XMLTEXT()之前就完成替换,修正后的代码如下:

REPLACE(
    CAST(
        XMLSERIALIZE(
            XMLAGG(
                XMLTEXT(
                    -- 先清理非法字符再传入XMLTEXT
                    CONCAT(REPLACE(RTNTXT.LIN_TX, x'1A', ''), '')
                )
            ) AS CLOB(10024)
        ) AS VARCHAR(402)
    ), '
', ''
) AS NARRATIVE

扩展优化

如果存在其他XML不支持的控制字符(0x00-0x1F区间内除制表符、换行符、回车符之外的字符),可叠加REPLACE逻辑,若数据库支持正则函数也可以一次性清理:

-- 多REPLACE叠加写法
CONCAT(REPLACE(REPLACE(RTNTXT.LIN_TX, x'1A', ''), x'00', ''), '')

-- 正则清理写法(支持REGEXP_REPLACE的数据库可用)
CONCAT(REGEXP_REPLACE(RTNTXT.LIN_TX, '[\x00-\x08\x0B\x0C\x0E-\x1F]', ''), '')

内容的提问来源于stack exchange,提问作者Neszka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:02