我正在从JDBC连接到静态 Oracle 12c数据库的表中写入大量行(约2000万)。我想提交每10,000行以防止回滚,这样如果出现错误,我可以有效地重新启动上次提交的insert命令。
使用JDBC可以实现此目的的最有效(时间和资源)方式是什么?
请注意,这将是来自大型基础表连接的INSERT INTO SELECT语句。因此,游标会大大减慢插入语句 - 它们真的是最好的解决方案吗?
答案 0 :(得分:1)
一般insert into ... select ...
最有效(如果您的系统会处理它)。
如果您真的想将其拆分,可以使用
等方案while <rows still need inserting>
insert into x
select from y where (y is not x) and rownum < 10000;
commit
其中(y is not in x)
是not in()
,NOT EXISTS()
或其他此类机制仅适用于尚未插入的选定行。