DECLAREhandler_typeHANDLER FORcondition_value[,...]sp_statementhandler_type: CONTINUE | EXIT | UNDOcondition_value: SQLSTATE [VALUE]sqlstate_value|condition_name| SQLWARNING | NOT FOUND | SQLEXCEPTION |mysql_error_code
Este comando especifica handlers que pueden tratar una o varias condiciones. Si una de estas condiciones ocurren, el comando especificado se ejecuta.
          Para un handler CONTINUE , continúa la
          rutina actual tras la ejecución del comando del handler. Para
          un handler EXIT , termina la ejecución del
          comando compuesto BEGIN...END actual. El
          handler de tipo UNDO todavía no se
          soporta.
        
              SQLWARNING es una abreviación para
              todos los códigos SQLSTATE que comienzan con
              01.
            
              NOT FOUND es una abreviación para
              todos los códigos SQLSTATE que comienzan con
              02.
            
              SQLEXCEPTION es una abreviación para
              todos los códigos SQLSTATE no tratados por
              SQLWARNING o NOT
              FOUND.
            
Además de los valores SQLSTATE , los códigos de error MySQL se soportan.
Por ejemplo:
mysql> CREATE TABLE test.t (s1 int,primary key (s1));
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter //
mysql> CREATE PROCEDURE handlerdemo ()
    -> BEGIN
    ->   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
    ->   SET @x = 1;
    ->   INSERT INTO test.t VALUES (1);
    ->   SET @x = 2;
    ->   INSERT INTO test.t VALUES (1);
    ->   SET @x = 3;
    -> END;
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> CALL handlerdemo()//
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @x//
    +------+
    | @x   |
    +------+
    | 3    |
    +------+
    1 row in set (0.00 sec)
          Tenga en cuenta que @x es
          3, lo que muestra que MySQL se ha ejecutado
          al final del procedimiento. Si la línea DECLARE
          CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
          no está presente, MySQL habría tomado la ruta por defecto
          (EXIT) tras el segundo
          INSERT fallido debido a la restricción
          PRIMARY KEY , y SELECT
          @x habría retornado 2.
        
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

