在 PLSQL 中,如何迭代更新一个非常大的表的字段?

Posted

技术标签:

【中文标题】在 PLSQL 中,如何迭代更新一个非常大的表的字段?【英文标题】:In PLSQL, how do you iteratively update a field of a very large table? 【发布时间】:2012-01-23 21:02:44 【问题描述】:

我有一个包含 3000 万行的 PLSQL 表,我想更新所有行的字段。

我尝试了一个循环(将更新批量为 100000 行间隔),但我无法使用

update tableA set columnA=1 where rownum between lower and upper

循环在新的上限和下限之间移动,直到行数用完。

【问题讨论】:

【参考方案1】:

为什么要迭代更新?为什么不想做一个简单的UPDATE

UPDATE tableA
   SET columnA = 1

这不是更新大量行的最有效方法。它还生成最少数量的REDOUNDO

【讨论】:

这样的简单更新会引发 3000 万行的错误 @WuschelbeutelKartoffelhuhn - 什么错误?为什么你认为将UPDATE 分成多个部分不会产生同样的错误? 无法将索引“某物”扩展 1024 @WuschelbeutelKartoffelhuhn - 如果您进行增量更新,该错误不会消失。根据 Oracle 错误号和错误消息的具体文本,这可能意味着指定索引所在的任何表空间都没有足够的可用空间来增长索引以容纳UPDATE

以上是关于在 PLSQL 中,如何迭代更新一个非常大的表的字段?的主要内容,如果未能解决你的问题,请参考以下文章

一个非常大的表的 SQL 分区

规范化一个非常大的表

如何查询拆分为 2 个较小表的表?联盟?看法?

怎样在plsql查询数据库的表

plsql中怎样查看表的脚本 已有一张表如何在plsql这个工具中差看他的创建脚本。

如何在一个非常大的表中有效地选择