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

Oracle 'INSERT ALL' mengabaikan duplikat

Di Oracle, pernyataan berhasil sepenuhnya atau gagal sepenuhnya (mereka atom). Namun, Anda dapat menambahkan klausa dalam kasus tertentu ke log pengecualian alih-alih memunculkan kesalahan:

  • menggunakan BULK COLLECT - SAVE EXCEPTIONS , seperti yang ditunjukkan dalam utas ini di askTom ,
  • atau menggunakan DBMS_ERRLOG (tersedia sejak 10g saya pikir).

Cara kedua semuanya otomatis, berikut demonya (menggunakan 11gR2):

SQL> CREATE TABLE test (pk1 NUMBER,
  2                     pk2 NUMBER,
  3                     CONSTRAINT pk_test PRIMARY KEY (pk1, pk2));

Table created.

SQL> /* Statement fails because of duplicate */
SQL> INSERT into test (SELECT 1, 1 FROM dual CONNECT BY LEVEL <= 2);

ERROR at line 1:
ORA-00001: unique constraint (VNZ.PK_TEST) violated

SQL> BEGIN dbms_errlog.create_error_log('TEST'); END;
  2  /

PL/SQL procedure successfully completed.

SQL> /* Statement succeeds and the error will be logged */
SQL> INSERT into test (SELECT 1, 1 FROM dual CONNECT BY LEVEL <= 2)
  2   LOG ERRORS REJECT LIMIT UNLIMITED;

1 row(s) inserted.

SQL> select ORA_ERR_MESG$, pk1, pk2 from err$_test;

ORA_ERR_MESG$                                       PK1 PK2
--------------------------------------------------- --- ---
ORA-00001: unique constraint (VNZ.PK_TEST) violated   1   1

Anda dapat menggunakan LOG ERROR klausa dengan INSERT ALL (terima kasih @Alex Poole ), tetapi Anda harus menambahkan klausa setelah setiap tabel:

SQL> INSERT ALL
  2   INTO test VALUES (1, 1) LOG ERRORS REJECT LIMIT UNLIMITED
  3   INTO test VALUES (1, 1) LOG ERRORS REJECT LIMIT UNLIMITED
  4  (SELECT * FROM dual);

0 row(s) inserted.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi tersimpan Oracle - berikan nama tabel sebagai parameter

  2. Membuat Pekerjaan di Oracle menggunakan DBMS_JOB

  3. Tanggal bulat hingga interval 10 menit

  4. Gunakan TOP atau Rank ketika menemukan beberapa pengamatan pertama atau paling banyak

  5. Fitur tersembunyi di Oracle