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

mysql存儲進程中的異常處置解析

編輯:MySQL綜合教程

mysql存儲進程中的異常處置解析。本站提示廣大學習愛好者:(mysql存儲進程中的異常處置解析)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql存儲進程中的異常處置解析正文


界說異常捕捉類型及處置辦法: 

  DECLARE handler_action HANDLER 
    FOR condition_value [, condition_value] ... 
    statement 
   
  handler_action: 
    CONTINUE 
   | EXIT 
   | UNDO 
   
  condition_value: 
    mysql_error_code 
   | SQLSTATE [VALUE] sqlstate_value 
   | condition_name 
   | SQLWARNING 
   | NOT FOUND 
   | SQLEXCEPTION  

這外面須要留意幾點: 

a、condition_value [,condition_value],這個的話解釋可以包含多種情形(方括弧表現可選的),也就是一個handler可以界說成針對多種情形停止響應的 操作;別的condition_value可以包含的值有下面列出來的6種:

1、mysql_error_code,這個表現mysql的毛病代碼,毛病代碼是一個數字,完成是由mysql本身界說的,這個值可以參考mysql數據庫毛病代碼及信息。

2、SQLSTATE [VALUE] sqlstate_value,這個同毛病代碼相似構成逐個對應的關系,它是一個5個字符構成的字符串,症結的處所是它從ANSI SQL和ODBC這些尺度中援用過去的,是以加倍尺度化,而不像下面的error_code完整是mysql本身界說給本身用的,這個和第一個相似也能夠 參考mysql數據庫毛病代碼及信息。

3、condtion_name,這個是前提稱號,它應用DECLARE...CONDITION語句來界說,這個前面我們會引見若何界說本身的condition_name。

4、SQLWARNING,表現SQLTATE中的字符串以‘01'肇端的那些毛病,好比Error: 1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR)

5、NOT FOUND,表現SQLTATE中的字符串以‘02'肇端的那些毛病,好比Error: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)

6、SQLEXCEPTION,表現SQLSTATE中的字符串不是以'00'、'01'、'02' 肇端的那些毛病,這裡'00'肇端的SQLSTATE其實表現的是勝利履行而不是毛病,別的兩個就是下面的4和5的兩種情形。 

下面的6種情形其實可以分為兩類:

一類就是比擬明白的處置,就是對指定的毛病情形停止處置,包含1、2、3這三種方法;

另外一類是對對應類型的毛病的 處置,就是對某一群毛病的處置,包含4、5、6這三種方法。這個是引見了condition_value。別的還要留意的一個內容是MySQL在默許情形 下(也就是我們沒有界說處置毛病的辦法-handler)本身的毛病處置機制:

1、關於SQLWARNING和NOT FOUND的處置辦法就是疏忽毛病持續履行,所以在游標的例子外面假如我們沒有對repeat的前提斷定的誰人值做個no_more_products=1的handler來處置,那末輪回就會一向下去。

2、關於SQLEXCEPTION的話,其默許的處置辦法是在湧現毛病的處所就終止失落了。 

b、statement,這個比擬簡略就是當湧現某種前提/毛病時,我們要履行的語句,可所以簡略的如 SET  var = value如許的簡略的語句,也能夠是龐雜的多行的語句,多行的話可使用BEGIN  .....  END這裡把語句包含在外面(這個比如delphi外面的情形,留意到我們的存儲進程也是多行的,所以也要BEGIN .... END)。

c、handler_action,這個表現當履行完下面的statement後,願望履行如何的舉措,這裡包含CONTINUE、EXIT、UNDO, 表現持續、加入、撤消(臨時不支撐)。這邊就是兩種舉措,其實這兩種舉措在下面也說過了,CONTINUE就是一個是SQLWARNING和NOT FOUND的默許處置辦法,而EXIT就是SQLEXCEPTION的默許處置辦法。 

另: 

condition_name:定名前提 
MySQL error code或許SQLSTATE code的可讀性太差,所以引入了定名前提: 

語法: 

  DECLARE condition_name CONDITION FOR condition_value 
   
  condition_value: 
    SQLSTATE [VALUE] sqlstate_value 
   | mysql_error_code  


應用: 

  # original 
  DECLARE CONTINUE HANDLER FOR 1216 MySQL_statements; 
   
  # changed 
  DECLARE foreign_key_error CONDITION FOR 1216; 
  DECLARE CONTINUE HANDLER FOR foreign_key_error MySQL_statements;
  

示例: 

  CREATE PROCEDURE sp_add_location 
    (in_location  VARCHAR(30), 
     in_address1  VARCHAR(30), 
     in_address2  VARCHAR(30), 
     zipcode    VARCHAR(10), 
     OUT out_status VARCHAR(30)) 
  BEGIN 
    DECLARE CONTINUE HANDLER 
      FOR 1062 
      SET out_status='Duplicate Entry'; 
   
    SET out_status='OK'; 
    INSERT INTO locations 
      (location,address1,address2,zipcode) 
    VALUES 
      (in_location,in_address1,in_address2,zipcode); 
  END; 

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

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