oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
在Oracle中,語句要么完全成功要么完全失敗(它們是原子的).但是,您可以在某些情況下添加子句來記錄異常而不是引發錯誤:
>使用BULK COLLECT – SAVE EXCEPTIONS,如this thread on askTom所示,
>或使用DBMS_ERRLOG(我認為10g以后可用).
第二種方法都是自動的,這是一個演示(使用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
您可以將LOG ERROR子句與INSERT ALL一起使用(感謝@Alex Poole),但您必須在每個表之后添加子句:
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.
總結
以上是生活随笔為你收集整理的oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        