【发布时间】:2016-10-05 21:28:08
【问题描述】:
CREATE DEFINER=`root`@`localhost` PROCEDURE `PrcCopyQuestion_Admin`(in Param1,in Param2 varchar(45))
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
Select 'Fail' as 'Status' ;
END;
DECLARE EXIT HANDLER FOR sqlwarning
BEGIN
ROLLBACK;
Select 'Fail' as 'Status' ;
END;
Start transaction;
Insert statement 1;
Insert statement 2;
SELECT 'Success' AS 'Status';
call PrcGetQuestionAndOption_Admin(@variable);
Commit;
END
我正在使用Mysql 5.7。如果第二个(插入语句 2)失败,则在提交块中。它将进入回滚部分并给我输出'Failed'。但是当我得到输出时,它仍然执行 Select 'Success' as Status in commit 块。
所以我的问题是第二个插入语句何时失败。它应该直接回滚并给我失败的状态。它不应该在提交块中执行状态为“成功”。
例如:回滚时我得到两个结果集:
Select 'Fail'..1st result set
Select 'Success'....2nd result set
我只需要输出
Select 'fail'
任何帮助表示赞赏!
【问题讨论】:
-
我在这里没有发现任何错误。您能否提供示例数据和真实陈述,以便我们尝试重现它?或者你自己试试sqlfiddle.com
-
先生!。我只需要在回滚时它应该作为“失败”状态执行。但是我得到了两个结果集。提交块中的一个。“成功”也在第二个结果集中执行。或者在事务(提交块)中我们不必使用select语句???
-
先生!我明白这一点。正如我所说,我在这里看不到任何错误。例如与此比较:stackoverflow.com/questions/9974325/… 或手册:dev.mysql.com/doc/refman/5.7/en/declare-handler.html 所以请提供真实数据,以便我们查看是否可以重现此问题。
-
是的,当我在 SP 中调用 SP 时出现异常,即调用 PrcGetQuestionAndOption_Admin(@variable);当我在这个 SP 中遇到错误时,我得到了 SQL 异常。两个插入语句运行良好。另外我只想知道是否有任何 sql 异常,例如事务提交块中的 RECORD NOT FIND,就像我们处理光标的方式一样。如果我们在事务提交块中没有找到任何记录。它应该像 sql 异常和 sql 警告一样抛出异常
标签: mysql