You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:54:08