oracel处理XML时,报ORA-31011、ORA-19202。

原字段为clob,
查询

SELECT XMLTYPE(字段) FROM TABLE_A

报错如下:

ORA-31011: XML 语法分析失败
ORA-19202: XML 处理 
LPX-00217: invalid character 12 (U+000C)
Error at line 1559
 时出错
ORA-06512: 在 "SYS.XMLTYPE", line 272
ORA-06512: 在 line 1

查看错误堆栈的程序源?

为了更好查看报错情况,直接查询clob字段。并利用二分法,通过时间,找出该条数据。

SELECT 字段 FROM TABLE_A where ID='111'

在这里插入图片描述

在这里插入图片描述
这里可以明显看出,报错字段的错误。
XML是有两个版本的,1.0和1.1,这样应该是version1.0不支持“ ”所导致(这里打出 & # x C ;直接就是箭头了,由于这个xml是页面端用到这个特殊字段, XML序列化的时候,用了version=1.1)。

XML有 version=1.0 和 version=1.1 版本。version1.0 和 version1.1 的区别在于,1.1 支持 Unicode 的后续版本,对命名使用的字符有更自由的政策,添加了一些空格符并且允许对 1.0 禁止使用的控制字符进行字符引用。

之前处理kettle导入的时候也遇到,这里尝试添加<?xml version=''1.1'' encoding="utf-8"?>

SELECT XMLTYPE('<?xml version="1.1" encoding="utf-8"?>'||字段) FROM TABLE_A

还是报错,

ORA-31011: XML 语法分析失败
ORA-19202: XML 处理 
LPX-00235: invalid XML version, must be 1.0 or 2.0
Error at line 1
 时出错
ORA-06512: 在 "SYS.XMLTYPE", line 272
ORA-06512: 在 line 1

查看错误堆栈的程序源?

这里居然提示version, must be 1.0 or 2.0,后面换了2.0还是不行。
最后通过去掉这个字符。后面就好了。

总结,处理XML的时候,如果遇到& # x C ;之类的字符,需要头部改成version=“1.1”。如不支持,则把特殊字符替换为空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值