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

在存储过程的CONTINUE HANDLER中能否获取错误详情?

在MySQL存储过程的CONTINUE HANDLER中获取错误详细信息

完全可以,MySQL提供了内置函数来获取错误的详细信息,你只需要在存储过程里声明对应变量,然后在CONTINUE HANDLER中捕获这些值即可。

修改你的示例代码,就能实现获取SQLSTATE和错误消息的需求:

DROP PROCEDURE IF EXISTS `DO_SOMETHING_WRONG`;
DELIMITER $$
CREATE PROCEDURE `DO_SOMETHING_WRONG`()
BEGIN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Hey, this is an error!';
END $$
DELIMITER ;

DROP PROCEDURE IF EXISTS `CALL_SOMETHING_WRONG`;
DELIMITER $$
CREATE PROCEDURE `CALL_SOMETHING_WRONG`()
BEGIN
    DECLARE ERROR_OCCURRED BOOLEAN DEFAULT FALSE;
    DECLARE ERROR_STATE CHAR(5); -- 存储SQLSTATE错误码
    DECLARE ERROR_MSG TEXT; -- 存储错误描述信息
    
    -- 在错误处理程序中捕获详细错误信息
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
        SET ERROR_OCCURRED := TRUE;
        SET ERROR_STATE = SQLSTATE(); -- 获取当前错误的SQLSTATE代码
        SET ERROR_MSG = MESSAGE_TEXT(); -- 获取当前错误的描述文本
    END;
    
    CALL DO_SOMETHING_WRONG();

    IF ERROR_OCCURRED IS TRUE THEN
        SELECT ERROR_STATE AS '错误状态码', ERROR_MSG AS '错误信息';
    ELSE
        SELECT 'No error occurred!' AS Output;
    END IF;
END $$
DELIMITER ;

调用CALL CALL_SOMETHING_WRONG();后,会返回包含具体错误信息的结果:

错误状态码错误信息
45000Hey, this is an error!

除了SQLSTATE()和MESSAGE_TEXT(),你还可以用MYSQL_ERRNO()获取MySQL的数字错误编号——只需要新增一个INT类型变量,在处理程序中赋值SET ERROR_CODE = MYSQL_ERRNO();即可。

内容的提问来源于stack exchange,提问作者Bowi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:20