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

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

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

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

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

【问题讨论】:

    标签: database plsql oracle11g


    【解决方案1】:

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

    UPDATE tableA
       SET columnA = 1
    

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

    【讨论】:

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