Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle-XMLTYPE :Jak zaktualizować wartość

Chociaż odpowiedź @Анатолий Предеин jest zdecydowanie poprawna dla 10g i 11g, należy pamiętać, że updatexml został przestarzały w Oracle 12c.

Od 12cR1 zalecanym sposobem manipulowania XML jest XQuery Update Facility. Nie jest to specyficzne dla Oracle, ale zalecenie W3C zaimplementowało również wiele innych narzędzi XML.

Poniżej znajdziesz kompletny przykład. Jednak nie zagłębiam się w szczegóły XQuery, ale odsyłam do następującej dokumentacji:

  • Aktualizacja XQuery dla niecierpliwych
  • Zastępowanie węzłów XML z Przewodnika programisty Oracle XML DB

Przykładowa konfiguracja

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

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

Wyniki

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołanie zapisanej PROCEDURY w Toad

  2. R12.2 Podsumowanie cyklu aktualizacji online

  3. Jak zainstalować Oracle SQL Developer 18.2 w systemie Windows 10?

  4. Zrób skumulowaną sumę w widoku wyrocznia

  5. Jak przeliterować rok podczas formatowania daty w Oracle