最近接触到mysql的存储过程,主要用于统计数据。
此外需要记录存储过程的执行状态,异常日志。
MYSQL手册描述(https://dev.mysql.com/doc/refman/5.6/en/get-diagnostics.html)
CREATE PROCEDURE do_insert(value INT)
BEGIN
-- Declare variables to hold diagnostics area information
DECLARE code CHAR(5) DEFAULT '00000';
DECLARE msg TEXT;
DECLARE rows INT;
DECLARE result TEXT;
-- 声明异常处理
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
-- 获取异常code,异常信息
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
END;
-- 执行插入语句
INSERT INTO t1 (int_col) VALUES(value);
-- 检查code是否改变,如果改变表示插入异常了
IF code = '00000' THEN
GET DIAGNOSTICS rows = ROW_COUNT;
SET result = CONCAT('insert succeeded, row count = ',rows);
ELSE
-- 复制异常code,异常信息
SET result = CONCAT('insert failed, error = ',code,', message = ',msg);
END IF;
-- 输入执行结果
SELECT result;
END;