2

我收到:

  • ORA-31011: XML 解析失败
  • ORA-19202: XML 处理中发生错误
  • LPX-00230:在名称或 Nmtoken 中发现无效字符 0 (U+0000)
  • 第 2 行出错
  • ORA-06512:在“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 强制转换之前替换空值,如何报告它?

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

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

4

2 回答 2

2

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

(我会发布更多细节,但我认为我们不应该分享该网站的信息。)

于 2012-04-26T03:42:15.667 回答
1

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

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

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

于 2012-04-26T20:53:35.930 回答