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