2012-03-26 6 views
0

ich habe XML-Struktur wie unten in XMLType Spalte (Oracle 10g)XMLType PL/SQL-Update Kind

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

Wie ich Kind Namen aktualisieren können, wo CHILDRENS_DEF lname = smith und CHILD_DATA no = 2 ??

+0

tat hast du etwas Glück dabei? –

Antwort

1

Sie können updateXML verwenden,
der XPath-Ausdruck sollte etwas wie folgt aussehen:

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

Wenn Sie die Spalte in der Tabelle aktualisieren möchten, es sollte wie folgt aussehen:

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'); 
+0

Wenn ich das versuchte, bekam ich die Fehlermeldung: ORA-00600: interner Fehlercode, Argumente: [qmcxdUnpicLoc9], [20], [28], [], [], [], [], [], [] ], [], [], [] – dbuser

+0

hast du es von sql * plus oder einem Tool (zB sqldeveloper, plsqldeveloper etc.) probiert? –

+0

Ich benutze pl/sql Entwickler v. 7.1.5.1398 – dbuser