Atitit mysql 存儲過程捕獲全部異常,以及日誌記錄異常信息

Atitit mysql 存儲過程捕獲全部異常,以及日誌記錄異常信息html

 

 

1.1. 異常的處理模式exit  continue undo模式 1java

1.2. 捕獲全部異常使用        DECLARE continue HANDLER FOR   sqlexception 1mysql

1.3. 捕獲特定異常使用HANDLER FOR  errorcode 2sql

1.4. 記錄異常到日誌表,獲取異常代碼和異常信息 2數據庫

1.5. 拋出自定義異常 3ide

2. 程序語言中捕獲sql自定義拋出的異常 3oop

2.1. 代碼 3fetch

3. 集合的循環loop while repeat模式 4ui

3.1. 對集合的循環 使用loop模式最簡單,whilerepeat都麻煩店。loop模式會自動處理集合結束。 4spa

3.2. While模式循環集合 。。須要定義一個 CONTINUE HANDLER FOR NOT FOUND 4

3.3. 參考資料 5

 

 

1.1. 異常的處理模式exit  continue undo模式

默認狀況下,mysql異常機制是exit模式,出錯直接退出。。

噹噹咱們對一個集合循環作處理的時候,須要捕獲異常,記錄日誌,繼續執行。

 

 

 

 

 

1.2. 捕獲全部異常使用        DECLARE continue HANDLER FOR   sqlexception  

 

相比js這一類語言的異常捕獲,sql的異常捕獲比較粗糙,只能捕獲一個sp內的異常,不能精確到某幾個代碼行。。。

 

 

 

 

BEGIN

#Routine body goes here...

 DECLARE a  varchar(102)  ;   DECLARE code  varchar(102)  ;   DECLARE msg  varchar(102)  ;  

  DECLARE b varchar(100) ;  DECLARE n int ;

  ##catch

      DECLARE continue HANDLER FOR   sqlexception  

cat1:BEGIN  

GET DIAGNOSTICS CONDITION 1

code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

 

SELECT code,msg;

#exit ALL

 

#leave cat1;

      END;  

set n=1;

 

 

 

  # while n<5 do  

lable:LOOP

       

call exThrow();

    set  n=n+1;

select  'in loop';

if n>3 THEN

 

select ' n>3 ';

leave lable;

end if;

 

  #end while;  

end loop;

 

END

 

1.3. 捕獲特定異常使用HANDLER FOR  errorcode

1.4. 記錄異常到日誌表,獲取異常代碼和異常信息

 

GET DIAGNOSTICS CONDITION 1

code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

 

SELECT code,msg;

 

 

1.5. 拋出自定義異常

#Routine body goes here...

   SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";  

 

2. 程序語言中捕獲sql自定義拋出的異常

 

2.1. 代碼

 

BEGIN

#Routine body goes here...

   SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";  

 

END

 

 

 

 

{

"@type":"java.lang.RuntimeException",

"cause":{

"@type":"java.sql.SQLException",

"errorCode":1644,

"localizedMessage":"extag_1 Query: call exThrow Parameters: []",

"message":"extag_1 Query: call exThrow Parameters: []",

"nextException":{

"errorCode":1644,

"localizedMessage":"extag_1",

"message":"extag_1",

"sQLState":"HY000",

"sQLState":"HY000",

"stackTrace":[{

"localizedMessage":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",

"message":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",

"stackTrace":[{

 

 

 

3. 集合的循環loop while repeat模式

3.1. 對集合的循環 使用loop模式最簡單,whilerepeat都麻煩店。loop模式會自動處理集合結束。

BEGIN

#Routine body goes here...

DECLARE a  varchar(102)  ;  

DECLARE b varchar(100) ;  DECLARE n int ;   DECLARE rs_finished int ;

 

DECLARE cursor_name CURSOR FOR select id,identity from system_passport   order by id desc limit 3;  

OPEN cursor_name;  

lable:LOOP

     fetch  cursor_name into a,b;

     select a,b;    

 end LOOP;  

 

 

END

 

 

 

3.2. While模式循環集合 。。須要定義一個 CONTINUE HANDLER FOR NOT FOUND

 

 

 

BEGIN

#Routine body goes here...

DECLARE a  varchar(102)  ;  

DECLARE b varchar(100) ;  DECLARE n int ;   DECLARE rs_finished int ;

 

DECLARE cursor_name CURSOR FOR select id,identity from system_passport   order by id desc limit 5;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET rs_finished=1;

 

#set rs_finished=0;

set n=1;select 'open cursor bef';

OPEN cursor_name;

select 'open cursor after';

fetch  cursor_name into a,b;

 select a,b;

select  rs_finished;  # is null

  while  rs_finished is null  do  

 

     select a,b;

  fetch  cursor_name into a,b;

 end while;  

 

 

END

 

 

3.3. 參考資料

 

GET DIAGNOSTIC 語句 - 千里之行始於足下 - 博客頻道 - CSDN.NET.html

Atitit mysql數據庫自定義異常在java裏面的捕獲與處理推薦標準與規範

 

 

 

做者:: 綽號:老哇的爪子claw of Eagle 偶像破壞者Iconoclast image-smasher

捕鳥王"Bird Catcher  kok  虔誠者Pious 宗教信仰捍衛者 Defender Of the Faith. 卡拉卡拉紅斗篷 Caracalla red cloak 萬獸之王

簡稱:: Emir Attilax Akbar 埃米爾 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米爾 阿提拉克斯 阿克巴 本 馬哈茂德 本 阿提拉 本 所羅門 本亞當  阿爾 拉帕努伊

經常使用名:艾提拉(艾龍),  EMAIL:1466519819@qq.com

 

 

頭銜:uke總部o2o負責人,全球網格化項目創始人,

uke交友協會會長  uke捕獵協會會長 Emir Uke部落首席大酋長,

 

uke宗教與文化融合事務部部長, uke宗教改革委員會副主席

uke制度與重大會議委員會委員長,uke保安部首席大隊長,uke制度檢查委員會副會長,

 

uke 首席cto   軟件部門總監 技術部副總監  研發部門總監主管  產品部副經理 項目部副經理   uke科技研究院院長 uke軟件培訓大師

 

uke波利尼西亞區大區連鎖負責人 湯加王國區域負責人 uke克爾格倫羣島區連鎖負責人,萊恩羣島區連鎖負責人,uke布維島和南喬治亞和南桑威奇羣島大區連鎖負責人

 Uke軟件標準化協會理事長理事長 Uke 數據庫與存儲標準化協會副會長

 

uke終身教育學校副校長   Uke醫院 與醫學院方面的創始人

 uec學院校長, uecip圖像處理機器視覺專業系主任   uke文檔檢索專業系主任

Uke圖像處理與機器視覺學院首席院長

Uke 戶外運動協會理事長  度假村首席大村長   uke出版社編輯總編

 

轉載請註明來源:attilax的專欄  http://blog.csdn.net/attilax

http://www.cnblogs.com/attilax/

--Atiend  v9

相關文章
相關標籤/搜索