如何从现有BLOB提取单个XML值?Oracle XMLTYPE调用报错求助
解决Oracle中BLOB转XMLTYPE的ORA-06553错误
问题原因
你遇到的ORA-06553: PLS-306错误,是因为直接将BLOB类型传入XMLTYPE构造函数时缺少字符集参数。BLOB是二进制数据,Oracle无法自动识别其中XML的编码格式,必须显式指定才能正确解析。
修正方案
方案1:显式指定字符集(推荐)
根据你BLOB中XML的实际编码,在XMLTYPE构造函数中添加字符集ID参数:
SELECT XMLTYPE( t.intfc_rqst_xml, NLS_CHARSET_ID('UTF8') ).EXTRACT('//*/text()').getStringVal() FROM INTERFACE_MESSAGE_INFO t;
- 替换
'UTF8'为你XML实际使用的编码(如'GBK'、'AL32UTF8'等),可通过XML声明中的encoding属性确认编码类型。 NLS_CHARSET_ID()函数用于将字符集名称转换为Oracle识别的ID值。
方案2:先转CLOB再转XMLTYPE
如果BLOB的编码与数据库默认字符集一致,也可以先将BLOB转换为CLOB,再传入XMLTYPE:
SELECT XMLTYPE( TO_CLOB( t.intfc_rqst_xml ) ).EXTRACT('//*/text()').getStringVal() FROM INTERFACE_MESSAGE_INFO t;
注意:这种方式依赖数据库默认字符集,若BLOB编码与默认不一致,可能出现乱码问题。
内容的提问来源于stack exchange,提问作者2020 Fraud
相关产品推荐
相关产品推荐

