簡體   English   中英

XMLType pl / sql添加子項

[英]XMLType pl/sql add child

我無法正確將子對象從pl / sql添加到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,其中CHILDRENS_DEF = lname = mushroom。 當我做這樣的事情:

UPDATE xml_childrens
SET  CLOBXMLCOL = INSERTCHILDXML(CLOBXMLCOL, 'DATA/CHILDRENS','CHILD_DATA', 
                XMLType('<CHILD_DATA no="2">
                            <CHILD_COL_VALUE no="1" name="Id">2</CHILD_COL_VALUE>
                            <CHILD_COL_VALUE no="2" name="Fname">Adele</CHILD_COL_VALUE>
                         </CHILD_DATA>'))

我為所有家庭增加了一個新孩子。 我如何只為lname = mushroom添加CHILD_DATA。 問題2。如何計算家庭的CHILD_DATA?

設置表並插入數據(不是我假設您的實際數據以</DATA>標記結尾,以便它是有效的XML

SQL> create table xml_children (
  2    xml_data xmltype
  3  );

Table created.


SQL> ed
Wrote file afiedt.buf

  1  insert into xml_children
  2   values( '<DATA>
  3    <CHILDRENS>
  4      <CHILDRENS_DEF lname="smith">
  5        <CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
  6        <CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
  7      </CHILDRENS_DEF>
  8      <CHILDRENS_DATA>
  9        <CHILD_DATA no="1">
 10          <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
 11          <CHILD_COL_VALUE no="2" name="Fname">Christopher</CHILD_COL_VALUE>
 12        </CHILD_DATA>
 13        <CHILD_DATA no="2">
 14          <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
 15          <CHILD_COL_VALUE no="2" name="Fname">Alice</CHILD_COL_VALUE>
 16        </CHILD_DATA>
 17        <CHILD_DATA no="3">
 18          <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
 19          <CHILD_COL_VALUE no="2" name="Fname">John</CHILD_COL_VALUE>
 20        </CHILD_DATA>
 21      </CHILDRENS_DATA>
 22    </CHILDRENS>
 23    <CHILDRENS>
 24      <CHILDRENS_DEF lname="mushroom">
 25        <CHILD_KOL no="1" name="Id" desc="Id" typ="NUMBER"/>
 26        <CHILD_KOL no="2" name="Fname" desc="Fname" typ="VARCHAR2"/>
 27      </CHILDRENS_DEF>
 28      <CHILDRENS_DATA>
 29        <CHILD_DATA no="1">
 30          <CHILD_COL_VALUE no="1" name="Id">1</CHILD_COL_VALUE>
 31          <CHILD_COL_VALUE no="2" name="Fname">Arthur</CHILD_COL_VALUE>
 32        </CHILD_DATA>
 33      </CHILDRENS_DATA>
 34    </CHILDRENS>
 35* </DATA>' )
SQL> /

您可以在XPath中使用following-sibling (盡管更改XML的定義更為合乎邏輯)

SQL> ed
Wrote file afiedt.buf

  1  update xml_children
  2     set xml_data = InsertChildXML( xml_data,
  3                                    '/DATA/CHILDRENS/CHILDRENS_DEF[@lname="mushroom"]/following-sibling::*',
  4                                    'CHILD_DATA',
  5                                    XMLType('<CHILD_DATA no="2">
  6                              <CHILD_COL_VALUE no="1" name="Id">2</CHILD_COL_VALUE>
  7                              <CHILD_COL_VALUE no="2" name="Fname">Adele</CHILD_COL_VALUE>
  8*                          </CHILD_DATA>'))
SQL> /

1 row updated.

SQL> select * from xml_children;

XML_DATA
--------------------------------------------------------------------------------
<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>
      <CHILD_DATA no="2">
        <CHILD_COL_VALUE no="1" name="Id">2</CHILD_COL_VALUE>
        <CHILD_COL_VALUE no="2" name="Fname">Adele</CHILD_COL_VALUE>
      </CHILD_DATA>
    </CHILDRENS_DATA>
  </CHILDRENS>
</DATA>
1 row created.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM