mysql儲存過程獲取系統異常

2021-10-07 21:03:06 字數 1970 閱讀 1546

第一次寫儲存過程,在這個異常處理上面爬了好多坑,記錄一下獲取系統異常的寫法, 要特別注意begin end的位置,位置不一樣,結果也不一樣,還有就是自定義異常與全域性異常結合使用,需要申明全域性異常,然後在全域性異常下,自定義異常需要用begin end包含起來,自定義異常會自己處理begin end之間的異常

建立儲存過程

drop procedure if exists test;

create procedure test ()

begin

-- 異常狀態

declare exp_no int default 0;

-- 異常資訊結果

declare exp_result varchar (4000) ;

declare code1 varchar (4000);

declare msg1 varchar (4000);

-- 如果出現異常就將exp_no設定為1

declare continue handler for sqlexception,sqlwarning,not found

begin

get diagnostics condition 1

code1 = returned_sqlstate,

msg1 = message_text;

set exp_no = 1;

end;

-- 執行sql語句

drop table test2;

begin

declare continue handler for sqlexception,sqlwarning,not found set exp_no =1;

drop table peple;

if exp_no = 1 then

set exp_result = '改表不存在';

select v_excep;

end if;

end;

-- 這裡必須要寫點東西,不然編譯不通過,我也不知道怎麼回事,可能是連著兩個if吧

select exp_result;

if exp_no = 1 then

select code1 ,msg1;

set exp_result = concat(code1, '-----', msg1);

select exp_result;

end if;

end;

測試call test();返回結果

注釋掉 drop table test2; 再call

結果,因為注釋掉有錯的sql,所以全域性異常為空

mysql儲存過程異常處理

定義條件和處理程式是事先定義程式執行過程中可能遇到的問題。並且可以在處理程式中定 決這些問題的辦法。這種方式可以提前 可能出現的問題,並提出解決辦法。這樣可以增強程式處理問題的能力,避免程式異常停止。mysql中都是通過declare關鍵字來定義條件和處理程式。本小節中將詳細講解如何定義條件和處理程...

MYSQL儲存過程抓捕異常

mysql儲存過程異常抓捕和異常資訊捕獲 直接上 create procedure testerrormessage inout code char,輸出的錯誤編號 inout message text 輸出錯誤文字資訊 begin declare exit handler for sqlexcep...

MySql儲存過程捕獲異常回滾

drop procedure if exists pro test create procedure pro test para a varchar 50 para b varchar 50 begin declare result code integer default 0 定義返回結果並賦初值...