sql - 提交表插入中的每 x 行

标签 sql oracle jdbc oracle12c

我正在通过 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/

相关文章:

sql - 将表中的多行分组到列中

sql - 使用 Oracle 函数从字符串中提取数字

php - Symfony 1.4 - MySql View 的 getPager 附加变量

mysql - 使用 max()+1 问题插入和设置值

mysql - 如果值在另一个表中,则选择某些列

mysql - 无法加载Mysql LOAD DATA LOCAL INFILE

甲骨文顶点 5 : New computations added to page throw ERR-1002

java - 应该在哪里定义可选的DefaultTableModel方法?

java - JDBC 未选择数据库

mysql - sonar-runner 延迟三分钟 "Store results in database"(jdbc/mysql)