ORACLE 事务学习
以下内容为本人的学习手记,有不足和理解错误的地方,请谨慎参考。
在ORACLE中的事务并不像MSSQL中的事务那样可以随意控制。
ORACLE的事务是在进行数据第一次被修改后自动开启的无法显示的开启事务(和MSSQL不同),直到commit或rollback事务结束。
如果在事务中使用SAVEPOINT,那么可以rollback to point 回滚到 某个savepoint,就是说可以部分回滚,但无法部分提交。rollback to point 后事务还没真正的结束,仍然要执行到commit 或rollback才真正的结束。
在存储过程中,如果程序内部发生错误,则整个事务自动回滚。如果该存储过程中没有指定commit或rollback,则调用完后要在程序外部进行commit或rollback.
当一个存储过程调用另一个存储过程时无论执行到哪个程序的commit或rollback,则整个事务会全部提交或回滚,也就是说子程序会提交或回滚调用它的父程序的事务,如果不想产生这样的影响要在子程序中创建分治事务(有点像一国两治), 语法如下:
create or replace procedure test_a is PRAGMA AUTONOMOUS_TRANSACTION;
begin
SQL BLOCK.......................
END;