批量插入:是否有一种方法可以在违反约束时跳过下一条记录?

Pha*_*ate 3 oracle mybatis

我正在使用mybatis在oracle数据库上执行大量批处理插入。

我的过程非常简单:我从文件列表中获取记录,并在对数据进行了一些检查之后将它们插入到特定的表中。

-每个文件平均包含180.000条记录,我可以拥有多个文件。

-一些记录可以存在多个文件中。

-如果每个列都匹配,则一条记录与另一条记录相同,也就是说,我不能简单地对特定字段执行检查。而且我在数据库中定义了一个约束,以确保满足此条件。

简而言之,我只想忽略在违反约束的情况下Oracle会给我的约束异常。

记录不存在?->插入

记录已经存在?->继续

mybatis可以做到吗?还是可以在数据库级别完成某些工作?

我对Application Server和DB都有控制权,所以请告诉我完成此任务的最有效方法是什么(即使我想避免过多依赖DB ...)

当然,我想避免在每次插入之前执行一次select * ...鉴于我要处理的记录数量会破坏我的应用程序的性能

Jon*_*ler 5

使用IGNORE_ROW_ON_DUPKEY_INDEX提示:

insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(table_name index_name) */
into table_name
select * ...
Run Code Online (Sandbox Code Playgroud)