sql >> Database teknologi >  >> RDS >> Oracle

Oracle-XMLTYPE:Sådan opdaterer du en værdi

Selvom svaret fra @Анатолий Предеин helt sikkert er korrekt for 10g og 11g, skal man være opmærksom på, at updatexml er blevet forældet i Oracle 12c.

Siden 12cR1 er den anbefalede måde at manipulere XML på XQuery Update Facility. Det er ikke specifikt for Oracle, men en W3C-anbefaling implementerede også mange andre XML-værktøjer.

Nedenfor finder du et komplet eksempel. Jeg går dog ikke ind på detaljerne i XQuery, men henviser dig i stedet til følgende dokumentation:

  • XQuery-opdatering til utålmodige
  • Udskiftning af XML-noder fra Oracle XML DB Developer's Guide

Eksempel på opsætning

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

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

Resultater

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. Sådan opretter du en serverløs GraphQL API til MySQL, Postgres og Aurora

  2. Her er tre grunde til, at du kan se topaktivitet i din SQL-instans

  3. Find ud af, om en værdi indeholder mindst ét ​​numerisk ciffer i SQLite

  4. Sådan opretter du en navigationsformular i Microsoft Access