2014-01-17 59 views
0

我正在使用oracle 11.2.0.3。我有以下結構的XMLType列:如何使用DeleteXML - 需要從Oracle中的XmlType中刪除XML節點

<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]') 

謝謝你的幫助!!!!!

回答

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> 
+0

感謝您的答覆。知道這個查詢語法可以工作是有幫助的。仍然不確定爲什麼我沒有看到結果,但這應該讓我更接近解決我的問題。 –