为什么在Oracle中存储过程不需要commit语句

时间:2018-08-06 10:04:55

标签: oracle

我是新成员。请帮助我确认我的问题。 为什么在Oracle中存储过程不需要commit语句? 谢谢您的回答

2 个答案:

答案 0 :(得分:2)

如果存储过程中有DML操作,并且存储过程中没有DML操作,并且Oracle方面没有限制,则该存储过程可能具有提交。 如何控制提交和回滚完全取决于事务的业务定义,并且与存储过程的功能无关。 我们提交或回滚整个交易。事务可能由一个或多个过程组成,因此我们不在单个过程级别处理提交或回退。 另一种情况是,如果您正在从某个其他外部应用程序中调用存储过程,并且数据库的自动提交功能为ON,那么数据将被自动提交或在某些库中,并且如果使用事务启动了框架,则将启用框架自动提交框架或库。因此,当外部应用程序(用Java或Shell脚本编写的用于任何其他lang的语言)调用该过程并发出连接请求,并在由于自动提交而断开连接时打开会话后处理时,它将提交更改。 但是,如果您使用sql developer尝试相同的操作,您会注意到,一旦回滚更改,它将还原更改。

select * from temp;

enter image description here

create or replace procedure proc_temp as
begin
 insert into temp values (11,sysdate,'CPU','CPU needs');
end;
/

exec proc_temp;

答案 1 :(得分:0)

孙先生。有一种叫做“良好实践”的东西,关于对存储过程的“提交”,有几点:

  • 调用您的SP的用户控制交易。他应该决定自己想要什么-提交还是回滚。不是我们。您的SP可能只是更大过程的一小部分;
  • 许多框架都有内置的事务控制-前端开发人员可以控制应用程序等中的流程。