我在oracle DB中有3个表.我正在编写一个过程来根据某些条件删除所有3个表中的某些行.
我在过程中逐个使用了所有三个删除语句.在执行上述存储过程时,执行时是否发生了自动提交?
否则,我是否需要在最后手动编写提交代码?
数据库级别没有自动提交,但您使用的API可能具有自动提交功能. 来自Tom Kyte.
那就是说,我想补充一下:
除非您正在进行自主交易,否则您应该远离直接提交程序:来自Tom Kyte.
摘抄:
我希望PLSQL不支持提交/回滚.我坚信交易控制必须在最顶层的调用者级别完成.这是您可以采用这N个存储过程并在事务中将它们绑定在一起的唯一方法.
此外,还应该注意的是,对于DDL(听起来不像你在程序中做任何DDL,基于你的问题,但只是将其列为潜在的问题),Oracle在之前和之后添加了一个隐式提交. DDL.
没有autocommit
,但是可以将commit命令设置为存储过程。
范例1: no commit
create procedure my_proc as begin insert into t1(col1) values(1); end;
当您执行程序时,您需要致电 commit
begin my_proc; commit; end;
范例2: commit
create procedure my_proc as begin insert into t1(col1) values(1); commit; end;
当您执行程序时,您不会被调用,commit
因为程序会这样做
begin my_proc; end;