Control del flujo en procedimientos almacenados en MySQL


Antes de empezar con las instrucciones propias para el control del flujo, vale la pena indicar el uso de las variables dentro de los procedimientos.
DECLARE nombre_variable tipe [DEFAULT valor]
Este comando se usa para declarar variables locales. Para proporcionar un valor por defecto para la variable, se incluye la cláusula DEFAULT. El valor puede especificarse como una expresión, es decir, no necesita ser una constante. Si no se indica la cláusula DEFAULT, el valor inicial será NULL. Una variable local sólo es visible dentro del bloque BEGIN ... END donde está declarada.

Para cambiar el valor de una variable se usa SET de este modo:
SET nombre_variable = expresion
Y para terminar este rápido repaso, recordar también que para poder acceder a una variable local a la finalización de un procedimiento se tiene que usar los parámetros de salida.

Bueno y ahora a lo que quería explicar:
IF condicion THEN sentencia
  [ELSEIF condicion THEN sentencia]
  [ELSE sentencia]
END IF

Ejemplo:
> DELIMITER //
> CREATE PROCEDURE miProcedimiento(IN p1 INT)
> BEGIN
>   DECLARE miVariable INT;
>   SET miVariable = p1 * 2;  
>   IF miVariable = 2 THEN
>     INSERT INTO lista VALUES(22);
>   ELSEIF miVariable = 4 THEN
>     INSERT INTO lista VALUES(4444);
>     ELSE
>     INSERT INTO lista VALUES(1);
>   END IF;
> END;
> //

CASE valor
  WHEN cuando_el_valor THEN sentencia
  [WHEN cuando_el_valor THEN sentencia]
  [ELSE sentencia]
END CASE

o
CASE
  WHEN condicion THEN sentencia
  [WHEN condicion THEN sentencia]
  [ELSE sentencia]
END CASE

Ejemplo:
> DELIMITER //
> CREATE PROCEDURE miProcedimiento(IN p1 INT)
> BEGIN
>   DECLARE miVariable INT;
>   SET miVariable = p1 * 2;  
>   CASE miVariable
>     WHEN 2 THEN INSERT INTO lista VALUES(22);
>     WHEN 4 THEN INSERT INTO lista VALUES(4444);
>     ELSE INSERT INTO lista VALUES(1);
>   END CASE;
> END;
> //
REPEAT
  sentencia
  UNTIL condicion
END REPEAT
Ejemplo:
> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
>   DECLARE miVariable INT;
>   SET miVariable = 1;  
>   REPEAT
>     INSERT INTO lista VALUES(miVariable);
>     SET miVariable = miVariable + 1;
>     UNTIL v >= 5;


>   END REPEAT;
> END;
> //
WHILE condicion DO
  sentencia
END WHILE
Ejemplo:
> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
>   DECLARE miVariable INT;
>   SET miVariable = 1;  
>   WHILE v >= 5 DO
>     INSERT INTO lista VALUES(miVariable);
>     SET miVariable = miVariable + 1;
>   END WHILE;
> END;
> //
[Etiqueta:] LOOP
  sentencia
END LOOP [Etiqueta]

Ejemplo:
> DELIMITER //
> CREATE PROCEDURE miProcedimiento()
> BEGIN
>   DECLARE miVariable INT;
>   SET miVariable = 1;
>   loop_label : LOOP
>     INSERT INTO lista VALUES(miVariable);
>     SET miVariable = miVariable + 1;
>     IF v >= 5 THEN
>       LEAVE loop_label;
>     END IF;
>   END LOOP;
> END;
> //

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.