http://database.51cto.com/art/201609/516968.htm
存储过程排错,一般要用错误处理器。详细内容参考上方链接。
使用示例:
set GLOBAL log_bin_trust_function_creators=true;#表示创建的存储过程或者函数对二进制日志写入无影响
##定义一个错误信息展示函数,方便存储过程展示更精确的错误信息
DELIMITER $$
CREATE FUNCTION fn_get_error()
RETURNS VARCHAR(250)
BEGIN
DECLARE code CHAR(5) DEFAULT '00000';
DECLARE msg TEXT;
DECLARE errno INT;
GET DIAGNOSTICS CONDITION 1 code = RETURNED_SQLSTATE,
errno = MYSQL_ERRNO, msg = MESSAGE_TEXT;
RETURN COALESCE(CONCAT("ERROR ", errno, " (", code, "): ", msg), '-');
END
$$
##定义相关的存储过程,可参照此模板写存储过程,对排错和维护有意义
DELIMITER $$
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE errpos int default 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT 'SQLException encountered' as No_TLucky, errpos as Position_Error,fn_get_error() AS Error_massage;
set errpos=1;/*错误位置1*/
insert into test.test set name='p1';
set errpos=2;
insert into test.test set name='p2';
set errpos=3;
insert into test.test set name='p3';
insert into test.test set name=p2;
END
$$