嵌套事務和事務保存點的錯誤處理
對於嵌套事務。
1.外部起事務,內部起事務,內外都有Try Catch
內部出錯:如果內部事務出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
外部出錯:如果外部事物出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
注:如果內部的事務不起事務名稱,內部如果出錯,將會回滾掉會話中的全部事務,而且報異常。
2.外部起事務,內部起事務,內部沒有Try Catch
內部出錯:如果內部事務出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
外部出錯:如果內部事務出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
3.外部起事務,內部不起事務,但有Try Catch。
內部出錯:外部事物正常提交,外部事物不會進入ROLLBACK,內部出錯之后的記錄也會正常執行。內部操作中,Try部分在錯誤出現之前的操作正常,Try部分在操作之后的操作不執行,然后進入Catch塊中執行操作。
外部出錯:內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
4.外部起事務,內部不起事務,但沒有Try Catch.
內部出錯:如果內部事務出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
外部出錯:如果內部事務出錯,內部和外部事物全部回滾,外部回滾之前的操作全部不存在,但是之后的操作繼續執行。
5.外部不起事務,內部起事務,但有Try Catch.
內部出錯:外部操作被正常執行,內部ROLLBACK操作前全部回滾,之后的操作正常執行。
外部出錯:出錯操作之前的操作不會回滾,出錯之后的操作不執行,跳入Catch塊中,內部事務不會回滾。
6.外部不起事務,內部起事務,但沒有Try Catch.
內部出錯:外部操作被正常執行,內部ROLLBACK操作前全部回滾。由於沒有catch塊,所以外部操作全部執行。
外部出錯:內部事務正常提交,外部只有當條記錄失敗,其他操作正常執行,但是有嚴重錯誤報出來。
對於事務保存點
事務保存點只有SAVE和ROLLBACK操作,當外部調用內部保存點,內部出現問題不影響外部事務,外部操作正常執行。當外部操作出現問題時,內部所有操作都回滾掉。
如:外部起事務,內部起保存點,內外都有Try Catch
內部出錯:外部操作正常,不進入Catch,內部事務回滾到保存點,之后的繼續執行。
外部出錯:如果外部事物在保存點之前出現異常,那么外部和內部所有操作回滾。如果外部事物在保存點之前出現異常,由於保存點已經提交了事務,導致外部rollback找不到對應的事務點。