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

时间:2015-12-09 15:44:00

标签: oracle oracle-sqldeveloper

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

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

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

3 个答案:

答案 0 :(得分:12)

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

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

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

摘录:

  

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

存储过程范围内没有自动提交。但是,如果您使用的是SQL Plus或SQL Developer,则可能会根据设置自动提交。

您应该将提交和回滚作为存储过程代码的一部分进行处理。