mysql存储过程中的充分处理

http://www.cnblogs.com/cookiehu/p/4994278.html

概念格外捕获类型以及处理方法:

MySQL 1😉

    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  

MySQL 2😉

立马间用留意几点:

  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,
表示继续、退出、撤销(暂时未支持)。这边就是零星种植动作,其实就有限种动作在点也说罢了,CONTINUEMySQL就是一个凡是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  

使用:

MySQL 3😉

    # 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;  

MySQL 4😉

示例:

MySQL 5😉

    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;  

MySQL 6😉

 

网站地图xml地图