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.
