LPX-00230:在名称或Nmtoken中找到无效字符0(U + 0000)

时间:2012-04-25 19:41:33

标签: xml oracle xmltype

我收到:

  • ORA-31011:XML解析失败
  • ORA-19202:XML处理发生错误
  • LPX-00230:在名称或Nmtoken中找到无效字符0(U + 0000)
  • 第2行出错
  • ORA-06512:at“SYS.XMLTYPE”,第254行
  • ORA-06512:第1行

尝试执行时:

select extractValue(
  XMLType(
    replace(myxmlcolumn,CHR(0),''
    )
  ), '/xpath/to/data'
)
foo,bar,foobar
from sch.tab 

WHERE cond='cond'

“myxmlcolumn”当然是CLOB数据类型,但包含XML。如果我没有对NULL执行replace(),那么这个错误就有意义了。那和错误是间歇性的(可能与我的条款匹配)。如果在XML转换之前应该替换它,将如何报告null?

10g企业版10.2.0.5.0版,Toad for Oracle专业版10.6.1.3

编辑: - 也尝试用'H'替换以证明它没有插入NULL(同样的错误) - 也试过替换(myxmlcolumn,'\ n',''以防它不喜欢chr(0)(同样的错误)

2 个答案:

答案 0 :(得分:1)

搜索LPX-00230的My Oracle Support,这看起来像Bug 9871430。

(我发布了更多详情,但我认为我们不应该从该网站分享信息。)

答案 1 :(得分:1)

这不是一个优雅的解决方案,我觉得有点脏。从@jonearles回答它看起来像一个已知的bug。简单的解决方案是 NOT 甚至尝试转换为XML。希望不需要高级xpath,在我的情况下它不是。

Select dbms_lob.substr(myxmlcolumn, 10, dbms_lob.instr(myxmlcolumn,'<data>') + 6)  

“data”是我追求的元素,它总是保持一个10长的值,并且是该元素的第一个也是唯一一个出现所以...我很幸运。