Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle-XMLTYPE :Cara memperbarui nilai

Sementara jawaban dari @Анатолий Предеин pasti benar untuk 10g dan 11g kita perlu menyadari bahwa updatexml telah ditinggalkan di Oracle 12c.

Sejak 12cR1 cara yang disarankan untuk memanipulasi XML adalah Fasilitas Pembaruan XQuery. Ini tidak spesifik untuk Oracle tetapi Rekomendasi W3C juga mengimplementasikan banyak alat XML lainnya.

Di bawah ini Anda akan menemukan contoh lengkap. Namun saya tidak membahas detail XQuery tetapi mengarahkan Anda ke dokumentasi berikut:

  • Pembaruan XQuery untuk yang tidak sabar
  • Mengganti Node XML dari Panduan Pengembang Oracle XML DB

Contoh Penyiapan

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

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

Hasil

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. Permintaan rekursif sederhana di Oracle

  2. Instal Oracle Client dari baris perintah tanpa interaksi pengguna

  3. Periksa apakah tanggal saat ini berada di antara dua tanggal Oracle SQL

  4. Masalah membangun cx_Oracle - libclntsh.so.11.1 => tidak ditemukan

  5. hentikan kesalahan kompilasi dalam skrip sqlplus