更新前 10000 行,然后更新下 10000 行,以此类推?

Posted

技术标签:

【中文标题】更新前 10000 行,然后更新下 10000 行,以此类推?【英文标题】:Update the first 10000 rows, then the next 10000 and so on? 【发布时间】:2019-03-12 16:34:09 【问题描述】:

我的表有近 800 万行。有没有办法更新前 10000 条记录,然后更新接下来的 10000 条记录等等.. 直到分别在 Oracle 中的第 800 万条记录?

我确实检查了 here 的 Select 语句。但是没有为 Update 语句找到任何解决方案。有人可以帮忙吗?希望这对将来有需要的人有所帮助。

更新:数据库版本:12C

【问题讨论】:

谢谢迈克。行是否需要按顺序更新(以某种预定的顺序),还是可以并行更新多组 10000?谢谢 批量更新是一种解决方案,看看this 您到底想达到什么目的?您有任何性能问题吗? 按顺序@alexgibbs。 嗨,Jacob,我对批次也有同样的想法。但通过 SQL 实现这一点将是我的首选。 【参考方案1】:

如果您知道哪些记录已经更新,这是一个简单的解决方案。至少它将使您的交易保持在合理的规模内。

DECLARE
    i number := 1;
BEGIN
    while i > 0 loop
      UPDATE < your table >
         SET col = <value>
         WHERE rownum < 100000
           AND <some statement that exclude already updated records>
      i := sql%rowcount;
      commit;
    end loop;
END;

【讨论】:

以上是关于更新前 10000 行,然后更新下 10000 行,以此类推?的主要内容,如果未能解决你的问题,请参考以下文章

每小时调用外部 API 并单独执行约 10000 行任务的作业

线段树区间更新&&求和poj3486

为啥在选择的更新跳过锁定时,若有的几个会话可以看到行?

使用Jquery和PHP单击保存按钮时如何将多个表行更新为mysql表?

如何在 SQL Server 中更新具有数百万行的大表?

从 JSONArray 插入/更新 +10000 行到 SqLite 时如何防止应用程序崩溃