Plsql 在PL/SQL中运行forall循环时,是否需要在之后提交?

Plsql 在PL/SQL中运行forall循环时,是否需要在之后提交?,plsql,oracle10g,oracle11g,forall,Plsql,Oracle10g,Oracle11g,Forall,PL/SQL forall循环是否会在特定的时间间隔自动提交,还是需要在循环后提交 Oracle 10g和11g FORALL i IN x.FIRST .. x.LAST delete from table where 1=1; 我目前有一个pl/sql脚本,它执行大容量收集,然后运行3个不同的forall循环来迭代收集。我当前在每个forall循环完成后提交,脚本中有一个commit语句。需要这个吗?它是否会降低执行速度,特别是当集合有数百万个条目时 谢谢您必须在FORALL之后明

PL/SQL forall循环是否会在特定的时间间隔自动提交,还是需要在循环后提交

Oracle 10g和11g

FORALL i IN x.FIRST .. x.LAST
    delete from table where 1=1;
我目前有一个pl/sql脚本,它执行大容量收集,然后运行3个不同的forall循环来迭代收集。我当前在每个forall循环完成后提交,脚本中有一个commit语句。需要这个吗?它是否会降低执行速度,特别是当集合有数百万个条目时


谢谢

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


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

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

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


无论如何,如果你的工作在第一次FORALL声明后失败,那么如果你还没有做出承诺,重新开始工作就会容易得多。

虽然我同意你在回答中所说的一切,但我认为这并不能完全回答问题。在FORALL语句之后不必提交。您可以稍后提交,但不应在事务结束前提交。