第17课 存储过程中的"异常处理"

2019-04-09  本文已影响0人  猫哥的技术博客

异常处理

如果出现报错了, 怎么办

搁在以前, 直接就停了

有了异常处理, 我们可以选择继续还是终止

create table test(id int);
create table test(id int);
select 1+1;

这段代码会报错(1050), 因为连续创建了两个相同的表...

create table test(id int)
> 1050 - Table 'test' already exists
> 时间: 0.003s

所以select 1+1;不会执行, 我们也看不到2...

现在我们有两种选择

  1. 忽略错误, 继续执行, 你会看到2
  2. 终止sql语句, 但是不要报错

continue 跳过错误

drop PROCEDURE if EXISTS hello;

create procedure hello() begin 
declare existed condition for 1050;
declare continue handler for existed set @fail = 1;
create table teacher(id int);
select 1+1;
end;

call hello();

也可以简写

drop PROCEDURE if EXISTS hello;

create procedure hello() begin 
declare continue handler for 1050 set @fail = 1;
create table teacher(id int);
select 1+1;
end;

call hello();

exit 终止程序

drop PROCEDURE if EXISTS hello;

create procedure hello() begin 
declare existed condition for 1050;
declare exit handler for existed set @fail = 1;
create table teacher(id int);
select 1+1;
end;

call hello();

整行语句会因为重复建表而终止, 也不会输出2, 但是不会报错
也可以简写成

drop PROCEDURE if EXISTS hello;

create procedure hello() begin 
declare exit handler for 1050 set @fail = 1;
create table teacher(id int);
select 1+1;
end;

call hello();
上一篇 下一篇

猜你喜欢

热点阅读