侧边栏壁纸
  • 累计撰写 10 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

个人MySQL存储过程模板

Chan Sheen
2024-11-22 / 0 评论 / 1 点赞 / 51 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

本文记录的是个人日常用到的存储过程模板,不喜请绕道,有误请指正。

1.存储过程创建模板

1.1 创建错误记录表单

CREATE TABLE IF NOT EXISTS su_ProcExecErrorInfo
(
	ExceptionID   INT AUTO_INCREMENT PRIMARY KEY,
	ProcName      VARCHAR(255) COMMENT '存储存储过程名称',
	ProcParam     VARCHAR(255) COMMENT '存储存储过程参数',
	ExceptionTime TIMESTAMP COMMENT '错误发生时间',
	ErrorCode     VARCHAR(5) COMMENT '错误代码',
	ErrorMessage  VARCHAR(1000) COMMENT '错误消息',
	SqlText       TEXT COMMENT '当前的 SQL 语句',
	StepInfo      VARCHAR(255) COMMENT '当前步骤的描述',
	ErrorOrigin   VARCHAR(255) COMMENT '错误来源(例如:SQL、Driver)'
);

1.2存储过程模板

DELIMITER $$

CREATE PROCEDURE `Your_Procedure_Name`
(
	IN v_ID       INT,
	IN v_UserID   INT,
	IN v_CallType INT,
	OUT v_RetVal  VARCHAR(400)
)
ProcLabel:
/*
    ========================================================================
    Stored Procedure Name:  你的存储过程名称
    Description:            xxxLabel,用于检查业务逻辑时如满足条件,则在SET v_RetVal 后跳出存储过程
    Created Date:           YYYY/mm/dd HH/MM
    Created By:             Your Name
    Version:                1.0
    Modified Date:
    Modified By:
    Modification Details:
    Input Parameters:       v_ID INT   -- xxx ID
                            v_UserID INT 当前用户的EmpID
                            v_CallType INT 用于针对预处理或执行或后处理,通常预处理用1,执行用2,预处理用3来进行标识,如没有检查,可以去除这个参数
    Output Parameters:      v_RetVal 输出结果,如12345,需要在业务翻译中提前定义好,如客户不使用多余,可直接返回中文(最好设置v_RetVal为TEXT)
    Error Handling:         如果有错误,错误信息记录在[su_ProcExecErrorInfo]表中,@SqlText可用来记录关键或易错步骤,用于后续查询跟踪
    ========================================================================
*/
BEGIN
	-- 定义变量
	DECLARE v_SqlText TEXT DEFAULT '';
	DECLARE v_StepInfo VARCHAR(255) DEFAULT '';

	-- 错误处理: 如果发生SQL异常则退出
	DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
		-- 捕获错误信息
		GET DIAGNOSTICS CONDITION 1 @ErrorCode = RETURNED_SQLSTATE, @ErrorInfo = MESSAGE_TEXT, @CLASS_ORIGIN = CLASS_ORIGIN;

		SET v_RetVal = -1;
		ROLLBACK;
		-- 回滚事务

		-- 插入错误记录到异常表
		INSERT INTO su_ProcExecErrorInfo
		(
			ProcName, ProcParam, ExceptionTime, ErrorCode, ErrorMessage, StepInfo, ErrorOrigin
		)
		VALUES
			(
				'Your_Procedure_Name', CONCAT('v_ID:', v_ID, ', v_UserID:', v_UserID, ', v_CallType:', v_CallType), CURRENT_TIMESTAMP, @ErrorCode, @ErrorInfo, v_StepInfo, @CLASS_ORIGIN 
			);

	END;

	-- 设置默认返回值
	SET v_RetVal = '0';

	-- 业务逻辑检查
	IF v_CallType = 1 THEN
		SET v_StepInfo = '1.Checking Start';
		-- 业务逻辑检查
		IF 1 <> 2 THEN
			SET v_RetVal = '123456';
			LEAVE ProcLabel; -- 退出存储过程
		END IF;

		SET v_StepInfo = '2.Checking Over';
	END IF;

	-- 启用事务
	IF v_CallType = 3 THEN
		START TRANSACTION;

		SET v_StepInfo = '2.Business Start';

		-- 记录容易出错的Sql语句以便后续跟踪
		SET v_SqlText = '';

		-- 业务处理逻辑
		COMMIT;
	END IF;

END $$

DELIMITER ;

1

评论区