MySQL-在嵌入式过程中回滚事务

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

如果使用信号发生错误,我会尝试在过程中回滚事务。 我有两个问题:

如果发生错误,我想停止执行语句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 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:测试正在运行。