儲存過程中巢狀事務
使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- MYsql-儲存過程-遊標的巢狀MySql儲存過程巢狀
- 不要在儲存過程中控制事務儲存過程
- MySQL 儲存過程中事務sql異常回滾MySql儲存過程
- MySQL 儲存過程/遊標/事務MySql儲存過程
- 關於事務的儲存過程儲存過程
- sql server中巢狀事務*SQLServer巢狀
- 儲存過程注意事項儲存過程
- oracle procedure儲存過程(pl/sql)_使用declare cursor_begin end巢狀Oracle儲存過程SQL巢狀
- SQL Server中存在真正的“事務巢狀”SQLServer巢狀
- oracle plsql儲存過程_if判斷與事務commitOracleSQL儲存過程MIT
- golang的巢狀事務管理Golang巢狀
- 碰到巢狀事務-筆記巢狀筆記
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- tcbs_批量儲存過程_plsql事務_savepoint_異常儲存過程SQL
- Oracle 巢狀事務 VS 自治事務Oracle巢狀
- oracle pl/sql儲存過程內外層遊標cursor巢狀引數化示例OracleSQL儲存過程巢狀
- Sqlserver中的儲存過程SQLServer儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- 關於 MySQL 的巢狀事務MySql巢狀
- oracle事務中的儲存點Oracle
- 編寫儲存過程基本注意事項儲存過程
- job呼叫儲存過程的注意事項儲存過程
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- 儲存過程、觸發器與事務之間的關係儲存過程觸發器
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- SQL Server的巢狀儲存過程中使用同名的臨時表怪像淺析SQLServer巢狀儲存過程
- 儲存過程儲存過程
- jsp中呼叫儲存過程JS儲存過程
- 儲存過程中慎用 execute immediate儲存過程
- java中呼叫ORACLE儲存過程JavaOracle儲存過程
- Laravel 之巢狀事務 transactions 實現Laravel巢狀
- hibernate能否實現巢狀事務巢狀
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程