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ノードは、有効なノードおよび同じタイプで更新する必要があります。

どうすれば期待される結果に到達できますか?

EDIT : 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 に答える