Oracle’INSERT ALL’忽略一再项
发布时间:2021-05-25 02:46:18 所属栏目:站长百科 来源:网络整理
导读:我有一个数据库表,它有一个独一的束缚(独一(DADSNBR,DAROLEID)对).我将同时在这个表中插入多个值,以是我想行使一个查询完成它 – 我假设这将是更快的方法.我的查询是这样的: INSERT ALL INTO ACCESS (DADSNBR,DAROLEID) VALUES (68,1) INTO ACCESS (DADSNBR
|
我有一个数据库表,它有一个独一的束缚(独一(DADSNBR,DAROLEID)对).我将同时在这个表中插入多个值,以是我想行使一个查询完成它 – 我假设这将是更快的方法.我的查询是这样的: INSERT ALL
INTO ACCESS (DADSNBR,DAROLEID) VALUES (68,1)
INTO ACCESS (DADSNBR,2)
INTO ACCESS (DADSNBR,3)
INTO ACCESS (DADSNBR,4)
SELECT 1 FROM DUAL
因为语句中的某些条目与数据库中已存在的条目一再,因此整个插入失败而且未插入任何行. 有没有步伐忽略独一束缚失败的环境,只需插入独一的那些,而不必将其拆分成单独的INSERT语句? 编辑:我意识到我也许不想这样做,但我如故很好奇它是否也许. 在Oracle中,语句要么完全乐成要么完全失败(它们是原子的).可是,您可以在某些环境下添加子句来记录非常而不是激发错误:>行使BULK COLLECT – SAVE EXCEPTIONS,如this thread on askTom所示, 第二种要领都是自动的,这是一个演示(行使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. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

