在MySQL中,特定異常須要特定處理。這些異常能夠聯繫到錯誤,以及子程序中的通常流程控制。定義異常
是事先定義程序執行過程當中遇到的問題,異常處理定義了在遇到問題時對應當採起的處理方式,而且保證存儲過程或者函數在遇到錯誤時或者警告時可以繼續執行。這樣能夠加強程序處理問題的能力,避免程序異常中止。mysql
declare condition_name condition for condition_value;複製代碼
其中,condition_name參數表示條件的名稱;condition_value參數表示條件的類型;sqlstate_value參數和mysql_error_code參數均可以表示MySQL的錯誤。例如ERROR 1146 (42S02)中,sqlstate_value值是42S02,mysql_error_code值是1146。sql
條件定義舉例
下面定義"ERROR 1146 (42S02)"這個錯誤,名稱爲can_not_find。能夠用兩種不一樣的方法來定義,代碼以下:函數
#方法一:使用sqlstate_value
DECLARE can_not_find CONDITION FOR sqlstate '42S02';
#方法二:使用mysql_error_code
DECLARE can_not_find CONDITION FOR 1146;複製代碼
declare handler_type handler for condition_value[,...] sp_statement
handler_type: continue|exit|undo
condition_name:|sqlwarning|not found|sqlexception| mysql_error_code複製代碼
其中,handler_type參數指明錯誤的處理方式,該參數有3個取值。這3個取值分別是CONTINUE、EXIT和UNDO。CONTINUE表示遇到錯誤不進行處理,繼續向下執行;EXIT表示遇到錯誤後立刻退出;UNDO表示遇到錯誤後撤回以前的操做,MySQL中暫時還不支持這種處理方式。
condition_value參數指明錯誤類型,該參數有6個取值。sqlstate_value
和mysql_error_code
與條件定義中的是同一個意思。condition_name
是DECLARE定義的條件名稱。SQLWARNING
表示全部以01開頭的sqlstate_value值。NOT FOUND
表示全部以02開頭的sqlstate_value值。SQLEXCEPTION
表示全部沒有被SQLWARNING或NOT FOUND捕獲的sqlstate_value值。
sp_statement表示一些存儲過程或函數的執行語句。ui
定義條件處理程序舉例spa
#方法一:捕獲sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info='CAN NOT FIND';
#方法二:捕獲mysql_error_code
DECLARE CONTINUE HANDLER FOR 1146 SET @info='CAN NOT FIND';
#方法三:先定義條件,而後調用
DECLARE can_not_find CONDITION FOR 1146 ;
DECLARE CONTINUE HANDLER FOR can_not_find SET @info='CAN NOT FIND';
#方法四:使用SQLWARNING
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';
#方法五:使用NOT FOUND
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='CAN NOT FIND';
#方法六:使用SQLEXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';複製代碼
第一種方法是捕獲sqlstate_value值。若是遇到sqlstate_value值爲42S02,執行CONTINUE操做,而且輸出"CAN NOT FIND"信息。
第二種方法是捕獲mysql_error_code值。若是遇到mysql_error_code值爲1146,執行CONTINUE操做,而且輸出"CAN NOT FIND"信息。
第三種方法是先定義條件,而後再調用條件。這裏先定義can_not_find條件,遇到1146錯誤就執行CONTINUE操做。
第四種方法是使用SQLWARNING。SQLWARNING捕獲全部以01開頭的sqlstate_value值,而後執行EXIT操做,而且輸出"ERROR"信息。
第五種方法是使用NOT FOUND。NOT FOUND捕獲全部以02開頭的sqlstate_value值,而後執行EXIT操做,而且輸出"CAN NOT FIND"信息。
第六種方法是使用SQLEXCEPTION。SQLEXCEPTION捕獲全部沒有被SQLWARNING或NOT FOUND捕獲的sqlstate_value值,而後執行EXIT操做,而且輸出"ERROR"信息。.net
關於條件處理在存儲過程或函數中使用參看code