当前位置:  开发笔记 > 数据库 > 正文

在oracle中执行存储过程后是否有任何自动提交?

如何解决《在oracle中执行存储过程后是否有任何自动提交?》经验,为你挑选了2个好方法。

我在oracle DB中有3个表.我正在编写一个过程来根据某些条件删除所有3个表中的某些行.

我在过程中逐个使用了所有三个删除语句.在执行上述存储过程时,执行时是否发生了自动提交?

否则,我是否需要在最后手动编写提交代码?



1> 小智..:

数据库级别没有自动提交,但您使用的API可能具有自动提交功能. 来自Tom Kyte.

那就是说,我想补充一下:

除非您正在进行自主交易,否则您应该远离直接提交程序:来自Tom Kyte.

摘抄:

我希望PLSQL不支持提交/回滚.我坚信交易控制必须在最顶层的调用者级别完成.这是您可以采用这N个存储过程并在事务中将它们绑定在一起的唯一方法.

此外,还应该注意的是,对于DDL(听起来不像你在程序中做任何DDL,基于你的问题,但只是将其列为潜在的问题),Oracle在之前和之后添加了一个隐式提交. DDL.



2> 小智..:

没有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;

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有