MySQL-在嵌入式过程中回滚事务
如果使用信号发生错误,我会尝试在过程中回滚事务。 我有两个问题: 如果发生错误,我想停止执行语句1 如果过程1中发生错误,我想停止执行statemtn 2。 程序1:MySQL-在嵌入式过程中回滚事务,mysql,error-handling,transactions,rollback,Mysql,Error Handling,Transactions,Rollback,如果使用信号发生错误,我会尝试在过程中回滚事务。 我有两个问题: 如果发生错误,我想停止执行语句1 如果过程1中发生错误,我想停止执行statemtn 2。 程序1: CREATE DEFINER=`edgar`@`%` PROCEDURE some_sp (IN param INT) BEGIN DECLARE `_rollback` BOOL DEFAULT 0; DECLARE new_legal_entity_id INT; DECLARE specialt
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
程序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
我已经阅读了,但仍然无法获得代码工作尝试:
分隔符$$
删除表(如果存在)`t`$$
删除过程(如果存在)`some_sp__1`$$
删除程序(如果存在)`some_sp`$$
创建表't`
`id`INT无符号
$$
在'param`INT中创建过程'some_sp'
开始
为SQLSTATE'45000'声明'speciality'条件;
如果'param',那么
信号“专业”;
如果结束;
插入't'并选择1;
结束$$
在“param”INT中创建过程“some_sp_1”
开始
声明`u rollback`BOOL DEFAULT FALSE;
声明SQLEXCEPTION集`\u rollback`的CONTINUE处理程序:=TRUE;
启动交易;
调用'some_sp``param`;
如果“回滚”,那么
回降;
其他的
-插入到't1'中,选择2;-失败,t1不存在
插入't'并选择2;
如果“回滚”,那么
回降;
其他的
犯罪
如果结束;
如果结束;
结束$$
定界符;
称为'some_sp_1'0;
-叫‘some_sp_1’1;
从't'中选择'id';
尝试:
分隔符$$
删除表(如果存在)`t`$$
删除过程(如果存在)`some_sp__1`$$
删除程序(如果存在)`some_sp`$$
创建表't`
`id`INT无符号
$$
在'param`INT中创建过程'some_sp'
开始
为SQLSTATE'45000'声明'speciality'条件;
如果'param',那么
信号“专业”;
如果结束;
插入't'并选择1;
结束$$
在“param”INT中创建过程“some_sp_1”
开始
声明`u rollback`BOOL DEFAULT FALSE;
声明SQLEXCEPTION集`\u rollback`的CONTINUE处理程序:=TRUE;
启动交易;
调用'some_sp``param`;
如果“回滚”,那么
回降;
其他的
-插入到't1'中,选择2;-失败,t1不存在
插入't'并选择2;
如果“回滚”,那么
回降;
其他的
犯罪
如果结束;
如果结束;
结束$$
定界符;
称为'some_sp_1'0;
-叫‘some_sp_1’1;
从't'中选择'id';
不,@wchiquito,这似乎不适合我。看我的answer@EdgarNavasardyan:测试正在运行。不,@wchiquito,这似乎对我不起作用。看我的answer@EdgarNavasardyan:测试正在运行。