DECLAREhandler_type
HANDLER FORcondition_value
[,...]sp_statement
handler_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.