【发布时间】:2013-06-10 09:12:35
【问题描述】:
我有xml文档
<d>
<r>a<b</r>
</d>
我想将其更新为
<d>
<r>a<b or c>d</r>
</d>
使用 updateXML 语句。
执行
select updateXML(xmltype('<d><r>a<b</r></d>'),
'/d/r[1]/text()',
'a<b or c>d')
from dual;
返回
<d>
<r>a&lt;b or c&gt;d</r>
</d>
因为“&”不好。
执行
select updateXML(xmltype('<d><r>a<b</r></d>'),
'/d/r[1]/text()',
'a<b or c>d')
from dual;
抛出
ORA-31067 XML 节点必须使用相同类型的有效节点进行更新。
我怎样才能达到预期的效果?
编辑:ORA-31067 仅在 10g 数据库中引发。在 11g 中是正确的查询。
EDIT2:在 10.2.0.3 版本上出现错误,在 10.2.0.5 上没有出现。可能是一个错误?
【问题讨论】:
-
它是否与“& l t;”一起使用(带空格)?
-
不,解析器找到 '&' 并抛出相同的错误。
-
@Kotodid,如果您尝试
htf.escape_sc('a<b or c>d')会发生什么?顺便说一句,您使用的是什么版本?因为在 11g 上它可以工作 sqlfiddle.com/#!4/d41d8/12128 -
htf.escape_sc只是将 替换为 <>,所以我在我的问题中得到了第一个样本。 DB版本为10g。 -
@Kotodid,这不是你想要的吗?