- Variables locales
- Condiciones
- Cursores
- Manejadores
DECLARE nombre_de_variable [, nombre_de_variable…] TIPO [valor predeterminado ];
DECLARE nombre_de_condición CONDITION FOR condición
condicion: {SQLSTATE [VALOR] sqlstate_value | mysql_errno}
DECLARE nombre_del_cursor CURSOR FOR instrucción_select
DECLARE handler_type
HANDLER FOR handler_condition [, handler_condition] …
instruccion
handler_type: {CONTINUE | EXIT}
handler_condition:
{
SQLSTATE[VALUE] sqlstate_value
| mysql_errno
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION
}
La declaración de una variable local, una condición, un cursor o un manejador solamente puede aparecer al principio de un bloque BEGIN … END. Si se necesitan hacer diferentes declaraciones, éstas deben hacerse en el siguiente orden:
- Declaración de variables y condiciones
- Declaración de cursores
- Declaración de manejadores
Las variables locales se pueden declarar dentro de alguna rutina en la misma línea (siempre y cuando sean del mismo tipo), separando cada una por una coma. Para darle un valor a éstas o para inicializarlas, se utilzará la instrucción SET.
La instrucción DECLARE … CONDITION crea el nombre para una condición. Dicho nombre puede referirse a una instrucción DECLARE … HANDLER. nombre_de_condición puede ser ya sea un valor SQLSTATE representado por cinco caracteres o un valor numérico específico de MySQL.
La instrucción DECLARE … CURSOR declara un cursor para ser asociado a algún SELECT , el cual no deberá contener la instrucción INTO. El cursor puede abrirse con la cláusula OPEN. Se deberá utilizar la instrucción FETCH para obtener los renglones resultantes del SELECT y se deberá cerrar con la instrucción CLOSE.
La instrucción DECLARE … HANDLER asocia una o más condiciones con una instrucción a ser ejecutada cuando alguna de las condiciones ocurre. El valor del handler_type indica qué ocurre cuando la condición se ejecuta. Con la instrucción CONTINUE , la ejecución de la instrucción continúa, con la instrucción EXIT el bloque BEGIN actual terminará.
handler_condition puede ser alguno de los siguientes valores:
- Un valor de SQLSTATE representado por una cadena de cinco caracteres
- Un valor numérico específico de MySQL
- El nombre de una condición declarada previamente con DECLARE … CONDITION.
- SQLWARNING, el cual cacha cualquier valor de SQLSTATE que empiece con 01.
- NOT FOUND, que cacha cualquier valor de SQLSTATE que empiece con 02.
- SQLEXCEPTION, que cacha cualquier valor de SQLSTATE no cachado por SQLWARNING o NOT FOUND.
Ejemplo:
delimiter $
CREATE PROCEDURE ejemplo ()
BEGIN
DECLARE 'Constraint Violation'
CONDITION FOR SQLSTATE '23000';
DECLARE EXIT HANDLER FOR
'Constraint Violation' ROLLBACK;
START TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (1);
COMMIT;
END;
delimiter ;
No hay comentarios:
Publicar un comentario