当前位置:Gxlcms > 数据库问题 > mysql存储过程事务和捕获异常信息

mysql存储过程事务和捕获异常信息

时间:2021-07-01 10:21:17 帮助过:6人阅读

table if exists simon_task; drop table if exists simon_log; create table simon_task(task varchar(200));-- 业务表 CREATE TABLE simon_log (test001 varchar(2000));-- 日志表 -- 失败测试 drop procedure if exists print_exception_msg; create procedure print_exception_msg() begin declare v_commit int default 2; -- 定义事务用,1为正常,-10为失败 declare msg text;-- 记录错误信息 -- 异常的时候msg捕获报错信息 declare continue handler for sqlexception begin get diagnostics condition 1 msg = message_text;set v_commit = -10; end ; start transaction;-- 设置事务 -- 业务表相关 insert into simon_task values (111111111); insert into staff (sda) values(111111111); if v_commit = -10 then ROLLBACK; -- 记录报错信息到日志 insert into simon_log values (msg); end if ; end; call print_exception_msg; -- 预期:insert into staff (sda) values(‘as‘); 这句是错误的,所以simon_task表和staff表都不应该insert成功,并且simon_log记录报错原因 select * from simon_task ; select * from simon_log ; -- 实际:同预期。 -- 成功测试 drop procedure if exists print_exception_msg2; create procedure print_exception_msg2() begin declare v_commit int default 2; -- 定义事务用,1为正常,-10为失败 declare msg text;-- 记录错误信息 -- 异常的时候msg捕获报错信息 declare continue handler for sqlexception begin get diagnostics condition 1 msg = message_text;set v_commit = -10; end ; start transaction;-- 设置事务 -- 业务相关语法 insert into simon_task values (2222222222); insert into simon_task values (3333333333); if v_commit = -10 then ROLLBACK; insert into simon_log values (msg); end if ; end; call print_exception_msg2; -- 预期:simon_task表新增两条记录,simon_log表没有新增的记录 select * from simon_task ; select * from simon_log; -- 实际:同预期。 View Code

 

mysql存储过程事务和捕获异常信息

标签:技术分享   dde   action   def   exce   roc   RoCE   col   and   

人气教程排行