【问题标题】:How to use DeleteXML - Need to Remove XML Node from XmlType in Oracle如何使用 DeleteXML - 需要从 Oracle 中的 XmlType 中删除 XML 节点
【发布时间】:2014-01-17 15:15:58
【问题描述】:

我正在使用 oracle 11.2.0.3。我有一个具有以下结构的 XMLType 列:

<section>
    <question questionID="1">
        <answer>US</answer>
        <answer>XX</answer>
     </question>
</section>

我需要删除第二个节点,以便在更新后 - 我留下以下内容:

<section>
    <question questionID="1">
        <answer>US</answer>
     </question>
</section>

我一直在尝试各种查询,但均未成功。根据我的研究,我认为下面的查询会起作用 - 但事实并非如此。我收到更新 XX 行的消息,但是当我查询 xml 时 - 我要删除的节点仍然存在!我在这里错过了什么?

update SECTION s set s.section_xml = deleteXML(s.section_xml, '//question[@questionID=1]/answer[2]')

谢谢你的帮助!!!!!!

【问题讨论】:

    标签: sql xml oracle oracle11g xquery


    【解决方案1】:

    您的查询确实有效,至少在 11.2.0.2.0 上:

    SQL> CREATE TABLE SECTION AS
      2  SELECT XMLTYPE('<section>
      3      <question questionID="1">
      4          <answer>US</answer>
      5          <answer>XX</answer>
      6       </question>
      7  </section>') section_xml FROM dual;
    
    Table created
    
    SQL> UPDATE SECTION s
      2     SET s.section_xml = deleteXML(s.section_xml,
      3                                   '//question[@questionID=1]/answer[2]');
    
    1 row updated
    
    SQL> SELECT s.section_xml.getClobVal() FROM SECTION s;
    
    S.SECTION_XML.GETCLOBVAL()
    --------------------------------------------------------------------------------
    <section>
      <question questionID="1">
        <answer>US</answer>
      </question>
    </section>
    

    【讨论】:

    • 感谢您的回复。知道此查询语法可以工作会很有帮助。仍然不确定为什么我没有看到结果,但这应该让我更接近解决我的问题。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2011-03-08
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多