I try to rollback transaction in a procedure if an error occurs (using SIGNAL). I have two problems:
- I want to stop executing Statement 1, if an error occurs
- I want to stop executing Stateemtn 2, if an error occurs in procedure 1.
Procedure 1:
CREATE DEFINER=`edgar`@`%` PROCEDURE some_sp (IN param INT)
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE new_legal_entity_id INT;
DECLARE specialty CONDITION FOR SQLSTATE '45000';
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1;
START TRANSACTION;
CASE -- Some condition
BEGIN
SIGNAL specialty
SET MESSAGE_TEXT = 'Error message';
END;
ELSE BEGIN END;
END CASE;
INSERT INTO .... -- Statement 1
COMMIT;
END
Procedure 2:
CREATE DEFINER=`edgar`@`%` PROCEDURE some_sp_1 (IN param INT)
BEGIN
DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE new_legal_entity_id INT;
DECLARE specialty CONDITION FOR SQLSTATE '45000';
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1;
START TRANSACTION;
CALL some_sp(some_param);
INSERT INTO .... -- Statement 2
COMMIT;
END
I have read this and this , but still cannot get the code work