我正在通过 JDBC 连接将大量行(约 2000 万行)写入到静态 Oracle 12c 数据库的表中。我想每 10,000 行提交一次以防止回滚,以便在出现错误时可以有效地从上次提交重新启动插入命令。
使用 JDBC 执行此操作的最有效(时间和资源)方式是什么?
请注意,这将是来自大型基础表连接的 INSERT INTO SELECT 语句。因此,游标会大大减慢插入语句的速度 - 它们真的是最好的解决方案吗?
最佳答案
一般来说,单个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()
或其他此类机制选择尚未插入的行。
关于sql - 提交表插入中的每 x 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45732732/