關於SAVEPOINT和自定義異常使用的一點看法
關於SAVEPOINT和自定義異常使用的一點經歷
前兩天有同事問怎麼樣才能控制儲存過程中的回滾和提交,以及如果某個環節發生錯誤之後怎麼樣退出該儲存過程,想了兩天才算是有點小眉目了。
Rollback to savepoint;回滾之前所有做過的事情但不包括塊和其他savepoint裡面的事務
SavePoint 應該是個單獨的事務點,他的失敗不影響其他事務
Commit 能夠提交之前所有的操作
Create table
CREATE TABLE TEST
(
testID
NUMBER(20) not null,
testName VARCHAR2(20)
);
-- Create/Recreate primary, unique and foreign key constraints
ALTER TABLE TEST
ADD CONSTRAINT testprimaryKey PRIMARY KEY (testID);
-- Created on 2008-1-10 by bq_wang
DECLARE
-- Local variables here
exitProc
EXCEPTION;
BEGIN
-- Test statements here
DELETE FROM test;
COMMIT;
SAVEPOINT b;
--
INSERT INTO test VALUES(4,'d');
COMMIT WORK; --僅控制b之前的事務
BEGIN
SAVEPOINT a;
INSERT INTO test VALUES(1,'a');
INSERT INTO test VALUES(2,'b');
UPDATE test SET testID=1 WHERE testID=2;
COMMIT WORK;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT a;
--如果有問題則回滾savepoint a的事務,不影響savepoint b
RAISE exitProc;
--直接跳到儲存過程最後,如果遮蔽仍可以處理之後的事務
END;
SAVEPOINT c;
--控制以下事務,如果遮蔽,則由最後的commit完成b和c的提交
INSERT INTO test VALUES(5,'e');
COMMIT WORK;
EXCEPTION
WHEN exitProc THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('end');
END;
前兩天有同事問怎麼樣才能控制儲存過程中的回滾和提交,以及如果某個環節發生錯誤之後怎麼樣退出該儲存過程,想了兩天才算是有點小眉目了。
Rollback to savepoint;回滾之前所有做過的事情但不包括塊和其他savepoint裡面的事務
SavePoint 應該是個單獨的事務點,他的失敗不影響其他事務
Commit 能夠提交之前所有的操作
Create table
CREATE TABLE TEST
(
testID
NUMBER(20) not null,
testName VARCHAR2(20)
);
-- Create/Recreate primary, unique and foreign key constraints
ALTER TABLE TEST
ADD CONSTRAINT testprimaryKey PRIMARY KEY (testID);
-- Created on 2008-1-10 by bq_wang
DECLARE
-- Local variables here
exitProc
EXCEPTION;
BEGIN
-- Test statements here
DELETE FROM test;
COMMIT;
SAVEPOINT b;
--
INSERT INTO test VALUES(4,'d');
COMMIT WORK; --僅控制b之前的事務
BEGIN
SAVEPOINT a;
INSERT INTO test VALUES(1,'a');
INSERT INTO test VALUES(2,'b');
UPDATE test SET testID=1 WHERE testID=2;
COMMIT WORK;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT a;
--如果有問題則回滾savepoint a的事務,不影響savepoint b
RAISE exitProc;
--直接跳到儲存過程最後,如果遮蔽仍可以處理之後的事務
END;
SAVEPOINT c;
--控制以下事務,如果遮蔽,則由最後的commit完成b和c的提交
INSERT INTO test VALUES(5,'e');
COMMIT WORK;
EXCEPTION
WHEN exitProc THEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('end');
END;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-134191/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異常-自定義異常的實現和測試
- Spring Boot 中關於自定義異常處理的套路!Spring Boot
- python自定義異常,使用raise引發異常PythonAI
- 自定義異常
- Java 異常(二) 自定義異常Java
- C#自定義異常 統一異常處理C#
- 自定義異常類
- Java自定義異常Java
- springboot自定義異常Spring Boot
- 2024.10.11(自定義異常)
- 關於噪聲標籤的一點看法和見解
- restframework 異常處理及自定義異常RESTFramework
- Java之自定義異常Java
- Java異常處理的兩種方式以及自定義異常的使用方法Java
- 關於Jpa和Mybatis的一些看法MyBatis
- SpringBoot系列——自定義統一異常處理Spring Boot
- springboot下新增全域性異常處理和自定義異常處理Spring Boot
- C#規範整理·異常與自定義異常C#
- 【Django】DRF自定義異常處理Django
- 自定義SPI使用JDK動態代理遇到UndeclaredThrowableException異常排查JDKException
- Java自定義異常的建立及多層呼叫Java
- 關於自定義 Alert
- 如何自定義一個全域性異常捕獲器-SpiderManIDE
- 物件導向 約束、自定義異常、加密物件加密
- Spring Cloud Gateway-自定義異常處理SpringCloudGateway
- Day39--自定義異常及小結
- 對於iOS效能優化的一點看法iOS優化
- Dubbo 自定義異常,你是怎麼處理的?
- Vue——關於自定義元件Vue元件
- 關於RecyclerView.ItemDecoration的自定義View
- java培訓教程分享:Java中使用者如何自定義異常?Java
- Spring Cloud Gateway自定義異常處理Exception HandlerSpringCloudGatewayException
- 關於SpringMVC的HttpMediaTypeNotSupportedException異常解決SpringMVCHTTPException
- 關於Java異常的分類示例Java
- 關於蘋果銷量的一些看法蘋果
- 關於面試的一些個人看法面試
- 關於自定義元件的那些事兒元件
- 【iOS】關於 UICollectionView 的自定義佈局iOSUIView
- 關於OpenResty中使用lua-resty-jwt出現的一個異常symbol not foundRESTJWTSymbol