1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > mysql存储过程事务和捕获异常信息

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

时间:2019-08-04 10:30:28

相关推荐

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

注:以下脚本均是在公司的mysql环境上跑的,版本号是5.6.16-log

其他版本可根据关键字 get diagnostics 自行百度。

drop 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()begindeclare 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()begindeclare 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。