【问题标题】:XMLType pl/sql update childXMLType pl/sql 更新子
【发布时间】:2012-03-26 18:17:25
【问题描述】:

我在 XMLType 列 (Oracle 10g) 中有如下 XML 结构

  <DATA>
  <CHILDRENS>
    <CHILDRENS_DEF lname="smith">
      <CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
      <CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
    </CHILDRENS_DEF>
    <CHILDRENS_DATA>
      <CHILD_DATA no="1">
        <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
        <CHILD_COL_VALUE no="2" name="Fname">Christopher</CHILD_COL_VALUE>
      </CHILD_DATA>
      <CHILD_DATA no="2">
        <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
        <CHILD_COL_VALUE no="2" name="Fname">Alice</CHILD_COL_VALUE>
      </CHILD_DATA>
      <CHILD_DATA no="3">
        <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
        <CHILD_COL_VALUE no="2" name="Fname">John</CHILD_COL_VALUE>
      </CHILD_DATA>
    </CHILDRENS_DATA>
  </CHILDRENS>
  <CHILDRENS>
    <CHILDRENS_DEF lname="mushroom">
      <CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
      <CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
    </CHILDRENS_DEF>
    <CHILDRENS_DATA>
      <CHILD_DATA no="1">
        <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
        <CHILD_COL_VALUE no="2" name="Fname">Arthur</CHILD_COL_VALUE>
      </CHILD_DATA>
    </CHILDRENS_DATA>
  </CHILDRENS>
</DATA>

如何更新孩子的姓名,其中 CHILDRENS_DEF lname=smith 和 CHILD_DATA no=2 ??

【问题讨论】:

  • 你有什么运气吗?

标签: xml oracle10g


【解决方案1】:

您可以使用updateXML,
XPATH 表达式应该看起来像这样:

DATA/CHILDRENS[CHILDRENS_DEF/@lname="smith"]/CHILDRENS_DATA/CHILD_DATA[@no="2"]/CHILD_COL_VALUE[@name="Fname"]/text()

如果你想更新表中的列,它应该是这样的:

UPDATE <<your_table>>
SET <<xml_col_name>> = updateXML(<<xml_col_name>>,
                                 'DATA/CHILDRENS[CHILDRENS_DEF/@lname="smith"]/CHILDRENS_DATA/CHILD_DATA[@no="2"]/CHILD_COL_VALUE[@name="Fname"]/text()',
                                 'AB');

【讨论】:

  • 当我尝试这个时,我得到了错误信息:ORA-00600: internal error code, arguments: [qmcxdUnpicLoc9], [20], [28], [], [], [], [] , [], [], [], [], []
  • 您是从 sql*plus 还是其他工具(即 sqldeveloper、plsqldeveloper 等)中尝试过?
  • 我正在使用 pl/sql developer v. 7.1.5.1398
  • 然后从sql*plus试试,我怀疑是plsqldeveloper的问题,不是查询的问题。
  • 好的,我测试了这个。在 10g 中一切正常,只有在 11g 上我有这个问题。在 SqlPlus 中:已连接。 SQL> UPDATE xml_children 2 SET xml_data = updateXML(xml_data, 3 'DATA/CHILDRENS[CHILDRENS_DEF/@lname="smit h"]/CHILDRENS_DATA/CHILD_DATA[@no="2"]/CHILD_COL_VALUE[@name="Fname"] /text()', 4 'AB');更新 xml_children * 第 1 行出现错误:ORA-00600:内部错误代码,参数:[qmcxdUnpicLoc9]、[20]、[28]、[]、[]、[]、[]、[]、[]、[] , [], []
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2014-12-02
  • 2015-10-01
相关资源
最近更新 更多