提交表插入中的每x行

时间:2017-08-17 10:31:20

标签: sql oracle jdbc oracle12c

我正在从JDBC连接到静态 Oracle 12c数据库的表中写入大量行(约2000万)。我想提交每10,000行以防止回滚,这样如果出现错误,我可以有效地重新启动上次提交的insert命令。

使用JDBC可以实现此目的的最有效(时间和资源)方式是什么?

请注意,这将是来自大型基础表连接的INSERT INTO SELECT语句。因此,游标会大大减慢插入语句 - 它们真的是最好的解决方案吗?

1 个答案:

答案 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()或其他此类机制仅适用于尚未插入的选定行。