我是新成员。请帮助我确认我的问题。 为什么在Oracle中存储过程不需要commit语句? 谢谢您的回答
答案 0 :(得分:2)
如果存储过程中有DML操作,并且存储过程中没有DML操作,并且Oracle方面没有限制,则该存储过程可能具有提交。 如何控制提交和回滚完全取决于事务的业务定义,并且与存储过程的功能无关。 我们提交或回滚整个交易。事务可能由一个或多个过程组成,因此我们不在单个过程级别处理提交或回退。 另一种情况是,如果您正在从某个其他外部应用程序中调用存储过程,并且数据库的自动提交功能为ON,那么数据将被自动提交或在某些库中,并且如果使用事务启动了框架,则将启用框架自动提交框架或库。因此,当外部应用程序(用Java或Shell脚本编写的用于任何其他lang的语言)调用该过程并发出连接请求,并在由于自动提交而断开连接时打开会话后处理时,它将提交更改。 但是,如果您使用sql developer尝试相同的操作,您会注意到,一旦回滚更改,它将还原更改。
select * from temp;
create or replace procedure proc_temp as
begin
insert into temp values (11,sysdate,'CPU','CPU needs');
end;
/
exec proc_temp;
答案 1 :(得分:0)
孙先生。有一种叫做“良好实践”的东西,关于对存储过程的“提交”,有几点: