sql >> Databasteknik >  >> RDS >> Oracle

Oracle-XMLTYPE:Hur man uppdaterar ett värde

Även om svaret från @Анатолий Предеин definitivt är korrekt för 10g och 11g måste man vara medveten om att updatexml har fasats ut i Oracle 12c.

Sedan 12cR1 är det rekommenderade sättet att manipulera XML XQuery Update Facility. Det är inte specifikt för Oracle men en W3C-rekommendation implementerade många andra XML-verktyg också.

Nedan hittar du ett komplett exempel. Jag går dock inte in på detaljerna i XQuery utan hänvisar dig istället till följande dokumentation:

  • XQuery Update för otåliga
  • Ersätta XML-noder från Oracle XML DB Developer's Guide

Exempel på inställningar

create table so61_t(
 id number
,xml xmltype
);

insert into so61_t values(1, '<?xml version="1.0" encoding="WINDOWS-1252"?>
<View>
    <ReportValues>
        <SalaryValue variable="HR" value="999"/>
        <SalaryValue variable="floor" value="20"/>
    </ReportValues>
</View>');

insert into so61_t values(2, '<?xml version="1.0" encoding="WINDOWS-1252"?>
<View>
    <ReportValues>
        <SalaryValue variable="HR" value="998"/>
        <SalaryValue variable="floor" value="19"/>
    </ReportValues>
</View>');

Ändra XML

update so61_t set xml =
xmlquery(
'copy $t := $x modify(
  (for $i in $t/View/ReportValues/SalaryValue[@variable="HR"]/@value
   return replace value of node $i with ''666'')
 ,(for $i in $t/View/ReportValues/SalaryValue[@variable="floor"]/@value
   return replace value of node $i with ''SALES'')
) return $t'
passing xml as "x" returning content
)
where id = 1
;

Resultat

SQL> col id for 99
SQL> col xml for a78
SQL> select id, xmlserialize(content xml as varchar2(200)) as xml from so61_t;
 ID XML
--- -------------------------------------------------
  1 <?xml version="1.0" encoding="UTF-8"?>
    <View>
      <ReportValues>
        <SalaryValue variable="HR" value="666"/>
        <SalaryValue variable="floor" value="SALES"/>
      </ReportValues>
    </View>
  2 <?xml version="1.0" encoding="UTF-8"?>
    <View>
      <ReportValues>
        <SalaryValue variable="HR" value="998"/>
        <SalaryValue variable="floor" value="19"/>
      </ReportValues>
    </View>

SQL>


  1. Infoga i en MySQL-tabell eller uppdatera om det finns

  2. Distribuera en Django-app till AWS Elastic Beanstalk

  3. pyodbc kan inte ansluta till databasen

  4. PostgreSQL Where count condition