当前位置: 首页 > article >正文

MySQL记录存储过程执行的错误信息

创建业务表

CREATE TABLE `tb_user` (
  `id` int NOT NULL primary key,
  `name` varchar(255) DEFAULT NULL,
  `age` int DEFAULT NULL
);

创建错误日志表

CREATE TABLE error_log (
	error_id INT AUTO_INCREMENT PRIMARY KEY,
	error_code char(5),
	error_message text,
	error_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

创建存储过程,如果运行报错,插入到error_log

DELIMITER $$
drop PROCEDURE if exists insert_user;
CREATE PROCEDURE insert_user(IN name VARCHAR(255), IN age int)
begin
  DECLARE errcode CHAR(5) DEFAULT '00000';
  DECLARE errmsg TEXT;
  DECLARE rowcount INT DEFAULT '0';
  DECLARE result TEXT;
  -- 声明异常处理
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
    BEGIN
      GET DIAGNOSTICS CONDITION 1
        -- 获取异常code,异常信息
        errcode = RETURNED_SQLSTATE, errmsg = MESSAGE_TEXT;
    END;
  
  INSERT INTO tb_user (`name`, age) VALUES(NAME, age);
  -- 检查code是否改变,如果改变表示插入异常了
  IF errcode = '00000' THEN
    GET DIAGNOSTICS rowcount = ROW_COUNT;
    SET result = CONCAT('succeeded, row count = ',rowcount);
  ELSE
    SET result = CONCAT('failed, error = ',errcode,', message = ',errmsg);
  END IF;
  -- 记录到错误日志表
  INSERT INTO error_log(error_code, error_message)VALUES(errcode, result);
  -- 输出执行结果
  select result;
end $$
DELIMITER ;

调用测试

CALL insert_user('John Doe', 20);

查询执行结果

select * from error_log;

参考mysql官方文档:https://dev.mysql.com/doc/refman/8.4/en/get-diagnostics.html


http://www.kler.cn/a/318672.html

相关文章:

  • 速盾:高防 CDN 和 CDN 的缓存机制都一样吗?
  • Golang | Leetcode Golang题解之第559题N叉树的最大深度
  • 限流算法(令牌通漏桶计数器)
  • 网络远程操控
  • 【VBA实战】用Excel制作排序算法动画续
  • Rust学习(二):rust基础语法Ⅰ
  • 改进拖放PDF转换为图片在转换为TXT文件的程序
  • 浅谈C++之多线程实现
  • 口语训练材料
  • 力扣【283-移动零】【数组-C语言】
  • 微服务之服务保护
  • git checkout -b dev origin/dev
  • golang cmd.exec 执行命令后报错 No such file or directory
  • 最优化理论与自动驾驶(二-补充):求解算法(梯度下降法、牛顿法、高斯牛顿法以及LM法,C++代码)
  • Java-数据结构-排序(三) |ू・ω・` )
  • 【网络安全】密码学的新进展
  • Nginx 如何开启压缩
  • 伊犁云计算22-1 rhel8 dhcp 配置
  • YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点
  • 操作系统知识3
  • 华为全联接大会HUAWEI Connect 2024印象(一):OpenEuler
  • uniapp沉浸式导航栏+自定义导航栏组件
  • 深入理解端口、端口号及FTP的基本工作原理
  • CREO教程——2 绘制标准图纸
  • python/requests库的使用/爬虫基础工具/
  • 最新版C/C++通过CLion2024进行Linux远程开发保姆级教学