plsql updatexml-无法根据属性更新值

Posted

技术标签:

【中文标题】plsql updatexml-无法根据属性更新值【英文标题】:plsql updatexml- can't update value based on attribute 【发布时间】:2014-06-27 15:07:02 【问题描述】:

我正在使用数据库 Oracle 11g,它有一些 xml 字段,例如:

<bookstore id="other">
    <fractionOfbooks>1.0</fractionOfbooks>
</bookstore>
<bookstore id="main">
    <fractionOfbooks>0.0</fractionOfbooks>
</bookstore>
<bookstore id="small">
    <fractionOfbooks>0.0</fractionOfbooks>
</bookstore>

所以我需要将分数从 id="other" 更改为 0.0,并将 id="main" 更改为 1.0。

我正在做两个查询,所以首先我做:

update
  db.mytable
set
  xml = updatexml(
                xml,
                '/*:bookstore/[@name="other"]/*:fractionOfbooks',
                0.0
  )

奇怪的是,如果我选择记录,生成的 xml 缺少最后一个标签,所以它变成:

<bookstore id="other">0</bookstore>
<bookstore id="main">
    <fractionOfbooks>0.0</fractionOfbooks>
</bookstore>
<bookstore id="small">
    <fractionOfbooks>0.0</fractionOfbooks>
</bookstore>

我认为设置包含标签的值不是一个很好的解决方案,所以谁能帮我找出问题所在?

谢谢

【问题讨论】:

【参考方案1】:

我错过了最后一个节点之后的 text() 函数:我正在更新节点本身而不是其内容。见:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions205.htm

【讨论】:

以上是关于plsql updatexml-无法根据属性更新值的主要内容,如果未能解决你的问题,请参考以下文章

所有属性的 null 和 not null 的分析值计数

如何修改plsql数据库列的属性值?

如何在plsql中将对象类型属性的值分配给具有相同属性属性的不同对象类型?

PLSQL 问题:使用带有过程块的随机值更新员工的薪水

Oracle PLSQL:如何根据每个值使用替换变量?

oracle sql - 根据另一个属性值更新同一个表