[MySQL光速入門]017 儲存過程中的"異常處理"

貓哥的技術部落格發表於2019-04-18

異常處理

如果出現報錯了, 怎麼辦

擱在以前, 直接就停了

有了異常處理, 我們可以選擇繼續還是終止

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();
複製程式碼

快速跳轉

相關文章