更新Oracle中的xml元素值

时间:2012-04-02 13:13:42

标签: xml oracle namespaces updatexml

在Oracle表中有一个XMLTYPE列,我想使用UpdateXML方法更新一些xml元素的值,但由于名称空间应用于非父类的xml元素,我遇到了麻烦。我的elmenets的xml结构看起来像:

<a>
  <b xmlns="urn:www.someSite.com/myModel">
    <c>my value</c>
  </b>
</a>

并更新以下表单不起作用:

UPDATE myTable 
  SET myColumn = UpdateXML(myColumn, '/a/b/c','other value', 'xmlns="urn:www.someSite.com/myModel"');

1 个答案:

答案 0 :(得分:2)

this post几乎相同,但更丑陋......

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/*',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));

编辑:如果b中有多个a元素,则必须更改a内的整个文字,而不是每个孩子,所以你可以尝试:

UPDATE myTable
   SET myColumn = updatexml(myColumn ,
                 '/a/text()',
                 updatexml(extract(myColumn , '/a/*'),
                           'b/c/text()',
                           'my new value',
                           'xmlns=urn:www.someSite.com/myModel'));