我有一个数据库表,它有一个唯一的约束(唯一的 (DADSNBR, DAROLEID)
对) . 我将同时在这个表中插入多个值,所以我认为这将是更快的方式'd like to get it done using one query - I' m . 我的查询是这样的:
INSERT ALL
INTO ACCESS (DADSNBR, DAROLEID) VALUES (68, 1)
INTO ACCESS (DADSNBR, DAROLEID) VALUES (68, 2)
INTO ACCESS (DADSNBR, DAROLEID) VALUES (68, 3)
INTO ACCESS (DADSNBR, DAROLEID) VALUES (68, 4)
SELECT 1 FROM DUAL
由于语句中的某些条目与数据库中已存在的条目重复,因此整个插入失败并且未插入任何行 .
有没有办法忽略唯一约束失败的情况,只需插入唯一的那些,而不必将其拆分成单独的INSERT语句?
Edit: 我意识到我可能还不知道是否有可能 .
2 回答
在Oracle中,语句要么完全成功要么完全失败(它们是原子的) . 但是,您可以在某些情况下添加子句来记录异常而不是引发错误:
使用
BULK COLLECT - SAVE EXCEPTIONS
,如this thread on askTom所示,或使用DBMS_ERRLOG(我觉得10g后可用) .
第二种方法都是自动的,这是一个演示(使用11gR2):
您可以将
LOG ERROR
子句与INSERT ALL
一起使用(感谢@Alex Poole),但您必须在每个表之后添加该子句:使用MERGE语句来处理这种情况: