4

PL/SQL forall 循环是否以特定间隔自动提交,还是我需要在循环后提交?

甲骨文 10g 和 11g

FORALL i IN x.FIRST .. x.LAST
    delete from table where 1=1;

我目前有一个执行批量收集的 pl/sql 脚本,然后运行 ​​3 个不同的 forall 循环来迭代集合。我目前在每个 forall 循环完成后提交,脚本中有一个提交语句。需要这个吗?它是否会减慢执行速度,尤其是当集合有几百万个条目时?

谢谢

4

2 回答 2

4

您必须在 FORALL 之后显式提交。毕竟,您正在使用 FORALL 执行高速 DML,并且您(应该)知道,DML 不会自动提交。

此外,即使 FORALL 遍历集合的所有行,它也不是循环,而是语句。它既没有 LOOP 也没有 END LOOP 语句。

于 2011-03-09T22:44:07.217 回答
4

FORALL 语句是标准的 DML:它只是一组单独的语句。因此,您应该遵循标准规则来决定是否需要提交:只有在您达到一致状态时才在事务结束时提交,以前从来没有。

如果您有 3 个 FORALL 语句,则没有理由提交 3 次,除非每个语句单独执行是一个事务。

无论如何,如果您的工作在第一个 FORALL 语句之后失败,如果您还没有提交,重新启动会容易得多。

于 2011-03-10T12:24:01.950 回答