MySQLのトランザクションのロールバックのサンプルコード
SQLコード:
mysql>
mysql> delimiter $$
mysql>
mysql> CREATE PROCEDURE myProc(
-> in_from INTEGER,
-> in_to INTEGER,
-> in_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 employee
-> SET salary=in_amount
-> WHERE id=in_from;
->
-> IF txn_error THEN
-> ROLLBACK TO savepoint_tfer;
-> SELECT 'Transfer aborted ';
-> ELSE
-> UPDATE employee
-> SET salary=in_amount
-> WHERE id=in_to;
->
-> IF txn_error THEN
-> ROLLBACK TO savepoint_tfer;
-> SELECT 'Transfer aborted ';
-> END IF;
-> END IF;
->
-> END$$
Query OK, 0 rows affected (0.00 sec)