更新前 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 行任务的作业