为什么这个MySQL存储过程似乎不执行退出处理程序?

问题描述 投票:0回答:1

我已经阅读了有关退出处理程序的文档,并在相关的SO问题herehere等其他地方找到了有用的代码思想。

尽管如此,调用下面的存储过程似乎完成了OK,并为参数success返回TRUE值。当我知道它肯定没有完成时,尤其是因为主体SQL中存在语法错误(它所指的是不存在的字段)。

因此退出处理程序应该已经启动,并且对于参数success返回FALSE。

任何人都可以帮助我了解为什么失败的事务未返回正确的参数值吗? (我怀疑这与我将success设置为true有关)

事务内部的实际SQL对这个问题并不重要,因此我没有显示出来。只是假设它可能成功完成交易,也可能未成功完成交易。我想通过参数检测到的是该交易的成功或失败。

DELIMITER $$
CREATE PROCEDURE do_thing (OUT success BOOLEAN)     

DETERMINISTIC
 BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SET success := FALSE; ROLLBACK; END;   # rollback on any error
DECLARE EXIT HANDLER FOR SQLWARNING  BEGIN SET success := FALSE; ROLLBACK; END;     # rollback on any warning

START TRANSACTION;

       < SQL that might cause an error >
       < in my case it was referring to a field that didn't exist>

COMMIT;
SET success := TRUE;  
END$$
DELIMITER ;

我已经阅读了有关退出处理程序的文档,并在此处和此处的其他地方的相关SO问题中找到了有用的代码思想。但是,将出现以下调用存储过程的情况...

mysql stored-procedures transactions
1个回答
0
投票

请参阅DBFIDDLE

第一部分是代码的副本,它引发错误。...

© www.soinside.com 2019 - 2024. All rights reserved.