domingo, 27 de enero de 2013

Declaraciones

En una declaración se pueden crear:


  • 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