我有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>
因为“&amp;”而不好。
执行
select updateXML(xmltype('<d><r>a<b</r></d>'),
'/d/r[1]/text()',
'a<b or c>d')
from dual;
引发
ORA-31067必须使用有效节点和相同类型更新XML节点。
我如何达到预期的结果?
编辑:仅在10g数据库中引发ORA-31067。这是11g中的正确查询。
EDIT2 :在10.2.0.3版本上引发错误,在10.2.0.5上没有引发错误。可能是因为它是一个错误?
答案 0 :(得分:0)
你可以使用这个丑陋的解决方法:
select dbms_xmlgen.convert(updateXML(xmltype('<d><r>a<b</r></d>'),
'/d/r[1]/text()',
'a<b or c>d').getStringVal(), 1)
from dual;