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

PL / SQL Cập nhật giá trị bằng DUP_VAL_ON_INDEX

Không cần phải lặp lại tất cả các bản ghi trong trường hợp cập nhật. Đó là lý do tại sao bạn nhận được 4 bản cập nhật thay vì mong đợi 2.

Thay vào đó, bạn chỉ nên cập nhật trong trường hợp của DUP_VAL_ON_INDEX ngoại lệ và chỉ hàng gây ra ngoại lệ.

Hãy thử một cái gì đó như thế này.

DECLARE
    ins NUMBER := 0;
    upd NUMBER := 0;
    CURSOR c1 IS
        SELECT cid
        FROM tbl_cust
        WHERE cid 
        IN ('1','2','3','4');
BEGIN
    FOR rec IN c1 LOOP
        begin 
           INSERT INTO tbl2 (id_tbl2, name_tbl2)
           VALUES(rec.cid, DECODE(rec.cid, '1', 'A',
                                        '2', 'B',
                                        '3', 'C',
                                        '4', 'D'));
           ins := ins + 1;
        EXCEPTION   WHEN DUP_VAL_ON_INDEX THEN
           UPDATE tbl2 set name_tbl2 = DECODE(rec.cid, '1', 'A',
                                        '2', 'B',
                                        '3', 'C',
                                        '4', 'D'));
           WHERE cust_cust_code = rec.cid;
           upd := upd + 1;
           continue; 
         end;    
    END LOOP;
        dbms_output.put_line('Updated: ' || upd);
        dbms_output.put_line('Inserted: ' || ins);
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận đầu ra từ dbms_output.get_lines bằng JDBC

  2. Oracle TDE có thể bảo vệ dữ liệu khỏi DBA không?

  3. oracle giúp đỡ thiếu dấu phẩy

  4. Nhà phát triển SQL:Không thể thu thập thống kê hệ thống:không đủ đặc quyền

  5. làm thế nào để tạo một trình kích hoạt như ràng buộc khóa chính?