sql >> Databáze >  >> RDS >> Oracle

Oracle-XMLTYPE :Jak aktualizovat hodnotu

Zatímco odpověď @Анатолий Предеин je určitě správná pro 10g a 11g, je třeba si uvědomit, že updatexml byla v Oracle 12c zastaralá.

Od verze 12cR1 je doporučeným způsobem manipulace s XML XQuery Update Facility. Není to specifické pro Oracle, ale doporučení W3C implementovalo také mnoho dalších XML nástrojů.

Níže naleznete kompletní příklad. Nicméně nezacházím do podrobností XQuery, ale místo toho vás odkážu na následující dokumentaci:

  • Aktualizace XQuery pro netrpělivé
  • Nahrazení uzlů XML z Příručky pro vývojáře Oracle XML DB

Příklad nastavení

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

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

Výsledky

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. Proč je přetypování z float na varchar v SQL Serveru zaokrouhleno?

  2. Chyba MySQL 1064 syntaxe, ale vše se zdá být v pořádku

  3. Vyberte více sloupců ze dvou tabulek pomocí greendao

  4. Aktualizace databáze a aplikace Android SQLite