儲存過程中巢狀事務
使用savepoint回滾難免有些效能消耗,一般可以用IF改寫
savepoint的良好使用的場景之一是“巢狀事務”,你可能希望程式執行一個小的事務,但是不希望回滾外面更大的事務
savepoint的良好使用的場景之一是“巢狀事務”,你可能希望程式執行一個小的事務,但是不希望回滾外面更大的事務
如下:
DROP PROCEDURE IF EXISTS nested_tfer_funds;
CREATE PROCEDURE nested_tfer_funds(
in_from_acct INTEGER,
in_to_acct INTEGER,
in_tfer_amount DECIMAL(8,2))
BEGIN
DECLARE txn_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN SET txn_error=1; END;
SAVEPOINT savepoint_tfer;
UPDATE x
SET a = a+1
WHERE b=x;
IF txn_error THEN
ROLLBACK TO savepoint_tfer;
SELECT 'Transfer aborted_1';
ELSE
UPDATE x
set a=a+1
WHERE b=1;
IF txn_error THEN
ROLLBACK TO savepoint_tfer;
SELECT 'Transfer aborted_2';
END IF;
END IF;
END;
測試:
CALL nested_tfer_funds(1,2,3);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-750671/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql server中巢狀事務*SQLServer巢狀
- SQL Server中存在真正的“事務巢狀”SQLServer巢狀
- golang的巢狀事務管理Golang巢狀
- Sqlserver中的儲存過程SQLServer儲存過程
- jsp中呼叫儲存過程JS儲存過程
- SQL Server的巢狀儲存過程中使用同名的臨時表怪像淺析SQLServer巢狀儲存過程
- Oracle 巢狀事務 VS 自治事務Oracle巢狀
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- 關於 MySQL 的巢狀事務MySql巢狀
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- Laravel 之巢狀事務 transactions 實現Laravel巢狀
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- MySQL之儲存過程MySql儲存過程
- oracle的儲存過程Oracle儲存過程
- MySQL---------儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- mysql儲存過程整理MySql儲存過程
- Oracle儲存過程-1Oracle儲存過程
- java spring巢狀事務詳情和事務傳播型別JavaSpring巢狀型別
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- Spring中事務巢狀這麼用一定得注意了!!Spring巢狀
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- mongo 儲存過程詳解Go儲存過程
- SQL 分頁儲存過程SQL儲存過程