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

Nilai Pembaruan PL/SQL menggunakan DUP_VAL_ON_INDEX

Tidak perlu mengulang semua catatan jika ada pembaruan. Itu sebabnya Anda mendapatkan 4 pembaruan, bukan yang diharapkan 2.

Sebagai gantinya, Anda harus memperbarui hanya dalam kasus DUP_VAL_ON_INDEX pengecualian dan hanya baris yang menyebabkan pengecualian.

Cobalah sesuatu seperti ini.

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. Mendefinisikan sumber data jta di luar wadah

  2. tambahkan catatan di nlog ke bidang dengan dataType =date

  3. Downtime dan Hotpatch menerapkan mode di adop R12.2

  4. Cara melihat badan Fungsi Tersimpan PL/SQL di Oracle

  5. buat tabel dengan serikat pilih tidak memiliki kendala