我正在使用以下简单insert
子句插入几百万行:
insert into DEST_TABLE
select *
from SRC_TABLE
但是插入时可能会出现重复,这会抛出错误,整个操作将结束。
有没有办法从头到尾执行插入操作,并且不会因重复插入错误而中断。忽略重复的插入错误并且不插入它们?
最好一起避免这个问题并预先过滤掉它们:
insert into DEST_TABLE
select *
from SRC_TABLE
EXCEPT
select *
from DEST_TABLE
这些是处理重复行的方法。
删除约束并插入行。然后使用选项 ignore_dup_row 在表上删除重复项创建聚集索引
使用选项 ignore_dup_row 删除所有约束在表上创建集群索引。如果行重复,它不会插入。
好吧,重复插入错误只能来自您的DEST_TABLE
.
所以删除 DEST_TABLE 中的约束,插入,清理数据,然后放回约束。
如果您的DEST_TABLE
.
另一个(更好的)解决方案是通过更改您的SELECT
子句来获取不重复的数据。
也许 where 子句会很好?
insert into DEST_TABLE
select *
from SRC_TABLE S
where not exists
(
select 1
from DEST_TABLE D
where D.id=S.id
)