程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql存儲過程(四)——異常處理,mysql存儲過程

Mysql存儲過程(四)——異常處理,mysql存儲過程

編輯:MySQL綜合教程

Mysql存儲過程(四)——異常處理,mysql存儲過程


有時候,不希望存儲過程拋出錯誤中止執行,而是希望返回一個錯誤碼。 MySQL 支持異常處理,通過定義 CONTINUE/EXIT 異常處理的 HANDLER 來捕獲 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 /無數據 / 其他異常)。其中, FOR 後面可以改為 SQLWARNING, NOT FOUND, SQLEXCEPTION 來指示所有異常都處理,相當於 oracle 中的 others 。例如,當不進行異常處理時,以下代碼將直接拋出一個 ERROR 1062 (23000) 錯誤:

         Sql code 4-1:

 

[c-sharp] view plain copy  
  1. CREATE PROCEDURE test_proc_ins1(  
  2.          IN i_id INT,  
  3.          IN i_name VARCHAR(100)  
  4. )  
  5. BEGIN  
  6.          INSERT INTO testproc VALUES (i_id,i_name);  
  7.          INSERT INTO testproc VALUES (i_id,i_name);  
  8. END;  

 

  經過異常處理後,可以避免拋出錯誤,而是定義一個返回參數 o_ret 賦予特殊值來表示失敗,這樣,在java 代碼中,可以通過獲取返回值而不是捕獲異常的方式來處理業務邏輯。例如將返回值設置為 -1:

         Sql code 4-2:

 

[c-sharp] view plain copy  
  1. CREATE PROCEDURE test_proc_ins1(  
  2.          IN i_id INT,  
  3.          IN i_name VARCHAR(100),  
  4.          OUT o_ret INT)  
  5. BEGIN  
  6.          DECLARE EXIT HANDLER FOR SQLSTATE '23000' set o_ret = -1;  
  7. -- 也可以這樣使用:  
  8. -- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;  
  9.          INSERT INTO testproc VALUES (i_id,i_name);  
  10.          INSERT INTO testproc VALUES (i_id,i_name);  
  11.          set o_ret = 1;  
  12. END;  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved