2

我有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>

不好是因为“&”。

执行

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

4

1 回答 1

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;
于 2013-06-11T04:36:15.343 回答