最近在做 Spring boot 架构,调用 MySQL(5.8)存储过程, 尽量希望存储过程异常处理完善些。这样就可以大大提升架构响应速度以及健壮性。
主要的关键点如下:
MySQL 存储过程异常处理
捕获异常信息,MySQL 内部错误号以及错误文本
话不多说,请看如下代码:
BEGIN
DECLARE mysql_error_code CHAR(5) DEFAULT '00000';
DECLARE mysql_error_msg varchar(500);
/*异常处理机制*/
DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION
begin
GET DIAGNOSTICS CONDITION 1
mysql_error_code = RETURNED_SQLSTATE, mysql_error_msg = MESSAGE_TEXT;
set prm_code = 'E';
set prm_message =concat('exe P_APP_GetVersion failery! reason:',' mysql_error_code:',mysql_error_code,',mysql_error_msg:',mysql_error_msg,'.');
end;
set prm_code = 'S';
set prm_message = 'exe P_APP_GetVersion sucessfully!';
/*实际上这个表不存在*/
select * from appversison;
END
总结:百度上关于这么详细的异常处理不是很多,大多数都是一知半解。最后还是在 MySQL 官方文档上找到了答案!