特定于不可打印字符的 Oracle XML 解析错误

问题描述 投票:0回答:1

我的 XML 查询是这样的。

SELECT X.CODE_VAL, X.CODE_DESC
FROM DATA_TBL A, XML_TBL B,
XMLTABLE('/XPATH/CHILDNODE1/CHILDNODE2' PASSING XMLTYPE(XML_TBL.XMLSTRING_TXT) COLUMNS
  CODE_VAL VARCHAR2(100) PATH 'PATH_TO_CODE_VAL', 
  CODE_DESC VARCHAR2(2000) PATH 'PATH_TO_CODE_DESC'
)X
WHERE A.ID=B.ID
AND A.ID='123'
;

此查询针对此特定 ID 抛出错误,错误消息为:

ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00217: invalid character 128512 (U+1F600)
Error at line 663
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
31011.00000 - "XML parsing failed"
*Cause: XML parser returned error while trying to parse the document.
*Action: Check if the document to be parsed is valid.

我尝试为我的会话设置 NLS,将输出列转换为 ascii,使用字符类 regexp_replace 不可打印字符,但一切都失败了。有人可以帮我解决这个问题吗?

我的数据库中有大约 130 万条记录,我怀疑可能有几百条 XML 数据,查找起来非常麻烦。

Oracle 数据库 11g 企业版版本 - 11.2.0.3.0 - 64 位

xml oracle ascii utf non-printing-characters
1个回答
0
投票

首先尝试使用 ASCIISTR 转换字符串,然后使用 regexp_replace 和模式 '\[A-F0-9]{4}' 您应该能够删除这些代码。

© www.soinside.com 2019 - 2024. All rights reserved.