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
相关产品推荐
相关产品推荐

