Oracle updateXml“小于符号”作为文本

时间:2013-06-10 09:12:36

标签: oracle xmltype updatexml

我有xml文档

<d>
  <r>a&lt;b</r>
</d>

我希望将其更新为

<d>
  <r>a&lt;b or c&gt;d</r>
</d>

使用 updateXML 语句。

执行

select updateXML(xmltype('<d><r>a&lt;b</r></d>'),
                 '/d/r[1]/text()',
                 'a&lt;b or c&gt;d')
  from dual;

返回

<d>
  <r>a&amp;lt;b or c&amp;gt;d</r>
</d>

因为“&amp;”而不好。

执行

select updateXML(xmltype('<d><r>a&lt;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上没有引发错误。可能是因为它是一个错误?

1 个答案:

答案 0 :(得分:0)

你可以使用这个丑陋的解决方法:

select dbms_xmlgen.convert(updateXML(xmltype('<d><r>a&lt;b</r></d>'),
                 '/d/r[1]/text()',
                 'a&lt;b or c&gt;d').getStringVal(), 1)
from dual;
相关问题