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

(11)mysql中的條件定義、處理

編輯:MySQL綜合教程

(11)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。

條件定義舉例
下面定義”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表示一些存儲過程或函數的執行語句。

定義條件處理程序舉例

#方法一:捕獲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”信息。


關於條件處理在存儲過程或函數中使用參看

(9)mysql中的存儲過程和自定義函數

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