本博客根据官方提供的信息,及查阅多个博客综合,且自己在环境中试验并验证方案可行。
接下来进入正题,我会尽力写的更通俗易懂一些。
第一步、建一张日志表,具体字段可以根据需求来设计,下图是我的参考
以上字段按顺序分别是ID,存储过程名称,错误代码,错误描述,插入时间,间隔时间。
第二步、在存储过程中添加以上字段的变量
-- 日志记录参数
DECLARE v_id VARCHAR(50);-- 日志表ID
DECLARE v_name VARCHAR(50) DEFAULT 'PROC_IMPORTNEWCONTRACT_REAL'; -- 过程名称
DECLARE v_code VARCHAR(10) DEFAULT '00000';-- 错误码
DECLARE v_msg_text TEXT DEFAULT 'SUCCESS';-- 返回消息默认为SUCCESS
DECLARE v_date DATETIME DEFAULT NOW();-- 插入时间默认当前时间
DECLARE v_invatime DATETIME DEFAULT NOW();-- 间隔时间默认当前时间
以上代码是放在BEGIN下面的
最后一步、事务提交与日志记录
以上代码是放在BEGIN END的END前面的,其中间的逻辑代码无需改变,如果你有特殊需求可以再改造。
参考资料:
上述的CONTINUE意思为sql发生异常时,为保证存储过程继续往下执行,执行ROLLBACK,进而执行日志记录的操作。如果将CONTINUE改为EXIT,则意为产生异常时,该存储过程会退出,无法执行日志记录的操作,因为该存储过程直接退出了。
RETURNED_SQLSTATE,返回报错代码,MESSAGE_TEXT返回报错具体信息,官方提供的信息里面是上面的写法。