为何MySQL WorkBench使用游标时SIGNAL SQLSTATE语句被忽略
问题根因
你使用的SQLSTATE '02000'正好对应MySQL的NOT FOUND异常类型,而你代码中声明了DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;,这个捕获器会接住所有02000状态的异常,执行SET done = TRUE后继续执行后续逻辑,所以SIGNAL语句不会抛出错误终止插入操作,只会让当前循环退出。
解决方案
把所有SIGNAL语句使用的SQLSTATE修改为MySQL预留的用户自定义错误码45000即可,这个状态码不会被你声明的NOT FOUND捕获器处理,触发后会直接终止触发器执行,回滚插入操作,同时返回你设置的错误提示。
修改示例:
把你代码中所有类似下面的语句:
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'Error: Algún integrante del escuadrón no tiene desbloqueados los dragones necesarios para matar a este dragón';
替换为:
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error: Algún integrante del escuadrón no tiene desbloqueados los dragones necesarios para matar a este dragón';
额外优化建议:SIGNAL触发后会直接终止代码执行,你写在SIGNAL之前的SET done = true;是多余语句,可以直接删除。
内容的提问来源于stack exchange,提问作者Aya
相关产品推荐
相关产品推荐

