Oracle中的SAVEPOINT


學習存儲過程中使用斷點回滾事務時,發現目前網絡上存在一個問題,那就是使用斷點回滾后,都忘記了一個很重要的事情,提交事務。雖然使用了斷點回滾,但是斷點回滾不像rollBack或commit一樣結束當前事務,而使用斷點回滾只會回滾到聲明斷點的地方,之前的產生的事務仍需要提交的,如果不提交,事務一直在數據庫中緩存.

 

保存點(SAVEPOINT)是事務處理過程中的一個標志,與回滾命令(ROLLBACK)結合使用,主要的用途是允許用戶將某一段處理回滾而不必回滾整個事務。

 

如果定義了多個savepoint,當指定回滾到某個savepoint時,那么回滾操作將回滾這個savepoint后面的所有操作(即使后面可能標記了N個savepoint)。

例如,在一段處理中定義了五個savepoint,從第三個savepoint回滾,后面的第四、第五個標記的操作都將被回滾,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,將會滾整個事務處理。

一旦執行了rollback那么savepoint的操作都將撤消,當然最后一定執行一次commit,否則所有的操作都是在緩存中進行的,不會真正的寫入數據庫中。

 

--起一個名字為A的savepoion 
savepoint A(這個A是savepoint的名字) 
--跳轉到savepoint A處 
rollback to A

 

DECLARE
     v_number number;
BEGIN
     v_number := 1;
     insert into DEPT values(deptno_seq.nextval,v_number,'');
     savepoint A;
     insert into DEPT values(deptno_seq.nextval,v_number+1,'');
     savepoint B;
     insert into DEPT values(deptno_seq.nextval,v_number+2,'');
     savepoint C;
     rollback to A;
     --如果這行不加,那么數據並沒有寫入到數據庫中,只是寫到了緩存中,直接查詢數據庫是沒有插入的值的
     commit;
END;



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM