在存储过程的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();后,会返回包含具体错误信息的结果:
| 错误状态码 | 错误信息 |
|---|---|
| 45000 | Hey, this is an error! |
除了SQLSTATE()和MESSAGE_TEXT(),你还可以用MYSQL_ERRNO()获取MySQL的数字错误编号——只需要新增一个INT类型变量,在处理程序中赋值SET ERROR_CODE = MYSQL_ERRNO();即可。
内容的提问来源于stack exchange,提问作者Bowi
相关产品推荐
相关产品推荐

