当前位置: 首页 > 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

相关文章:

  • [EAI-026] DeepSeek-VL2 技术报告解读
  • Ansible自动化运维实战--fetch、cron和group模块(5/8)
  • C# 9.0记录类型:解锁开发效率的魔法密码
  • Linux pkill 命令使用详解
  • C++ 中用于控制输出格式的操纵符——setw 、setfill、setprecision、fixed
  • (2)SpringBoot自动装配原理简介
  • 改进拖放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远程开发保姆级教学