Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle-XMLTYPE:Cách cập nhật giá trị

Mặc dù câu trả lời của @ Анатолий Предеин chắc chắn đúng cho 10g và 11g, một người cần lưu ý rằng updatexml đã không được chấp nhận trong Oracle 12c.

Kể từ 12cR1, cách được khuyến nghị để thao tác với XML là Cơ sở Cập nhật XQuery. Nó không dành riêng cho Oracle nhưng Khuyến nghị W3C cũng đã triển khai nhiều công cụ XML khác.

Dưới đây bạn sẽ tìm thấy một ví dụ hoàn chỉnh. Tuy nhiên, tôi không đi vào chi tiết của XQuery mà chỉ bạn đến tài liệu sau:

  • Cập nhật XQuery cho những người thiếu kiên nhẫn
  • Thay thế các nút XML từ Hướng dẫn của nhà phát triển Oracle XML DB

Thiết lập mẫu

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

Sửa đổi 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
;

Kết quả

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. Nhiều câu lệnh SQL chèn

  2. Làm thế nào để tạo tệp nhật ký trong Oracle bằng PL / SQL?

  3. Liệt kê tất cả các trình kích hoạt trong Cơ sở dữ liệu Oracle

  4. tính toán số dư đang chạy trong truy vấn oracle

  5. Sử dụng chế độ xem không có khóa chính với Thực thể