IF,
LOOP, ITERATE, LEAVE, REPEAT/UNTIL y WHILE/DO.
La
sentencia IF:
Qué es?
Es una declaración, también existe el if como función y no lo debemos confundir.
Sintaxis
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
Funcionamiento
IF implementa un constructor condicional básico. Si search_condition se evalúa a cierto, el comando SQL correspondiente “THEN” se ejecuta. Si no coincide ninguna search_condition, salta a la sucesión de ELSEIF/ELSE en caso de haberla.
Ejemplo
Crearemos un pequeño procedimiento. El siguiente ejemplo utiliza la sentencia IF para comprobar si un número es múltiplo de 100.
delimiter //
create procedure select_arbitre(in n int)
begin
if (mod(n,100) = 0) then
select n/100;
end if;
end //
La
sentencia CASE:
Qué es?
El comando CASE para procedimientos almacenados implementa un constructor condicional complejo.
SintaxisCASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASECASEWHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASEFuncionamiento
Si una search_condition se evalúa a cierto, el comando SQL correspondiente se ejecuta. Si no coincide ninguna condición de búsqueda, el comando en la cláusula ELSE se ejecuta.
Nota: La sitaxis de un comando CASE mostrado aquí para uso dentro de procedimientos almacenados difiere ligeramente de la expresión CASE. El comando CASE no puede tener una cláusula ELSE NULL y termina con END CASE en lugar de END.
La sentencia LOOP:
Qué es?
Loop implementa un constructor de bucle simple que permite la ejecución repetida de comandos particulares.
Sintaxis
[begin_label:] LOOP
statment_list
END LOOP [end_label]
Funcionamiento
La ejecución del comando se repite hasta acabar el bucle, normalmente por el comando “Leave”.
Normalmente los comandos LOOP se etiquetan:
“end_label” no puede darse si no esta presente “begin_label” , y si ambos lo están, deben ser el mismo.
Normalmente se usa conjuntamente con los constructores “Leave”, para abandonar el bucle en caso de cumplirse una condición, y “Iterate” para volver a hacer el bucle si cumple una condición.
La sentencia LEAVE:
Qué es?
Esta instrucción es utilizada para salir de alguna estructura de control. Puede ser usada dentro de un BEGIN ... END o dentro de algún ciclo (Bucles).
Sintaxis
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
END IF;
LEAVE label1; ---> Aquí rompemos un Bucle
END LOOP label1;
Funcionamiento
Con este comando logramos romper el bucle y salir de él.
La sentencia ITERATE:
Qué es?
ITERATE significa “vuelve a hacer el bucle”.
ITERATE sólo puede aparecer en comandos LOOP, REPEAT, y WHILE .
Sintaxis
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
Funcionamiento
Si se cumple la condición, el Iterate repite el loop.
La sentencia REPEAT/UNTIL
Qué es?
La sentencia REPEAT/UNTIL es un comando que repite el comando que se encuentra en su interior hasta que se cumple una condición.
Sintaxis
Esta sentencia está formada por dos parámetros básicos:
1. La sentencia o lista de sentencias que se han de repetir.
2. La condición de salida del bucle.
La sentencia ha de terminar con una sentencia END REPEAT;
Además la sentencia REPEAT puede estar etiquetada por una etiqueta de inicio (BEGIN) y una de final (END) iguales.
Funcionamiento
En esta sentencia se repite la lista de sentencias hasta que la condición es cierta. El bucle siempre entra por lo menos una vez y la lista de sentencias puede consistir de más de una, separadas por un punto coma (;) después de haber delimitado la //.
La sentencia WHILE/DO
Qué es?
La sentencia WHILE/DO es un comando que repite el comando que se encuentra en su interior mientras la condición del WHILE es cierta.
Sintaxis
[begin_label:]
WHILE search_condition DO
statement_list
END WHILE
[end_label]
Esta sentencia está formada por dos parámetros básicos:
1. La condición de permanencia en el bucle.
2. La sentencia o lista de sentencias que se han de repetir.
La sentencia ha de terminar con una sentencia END WHILE;
Además la sentencia WHILE/DO puede estar etiquetada por una etiqueta de inicio (BEGIN) y una de final (END) iguales.
Funcionamiento
En esta sentencia se repite la lista de sentencias mientras la condición es cierta. El bucle siempre entra por lo menos una vez y la lista de sentencias puede consistir de más de una, separadas por un punto coma (;) después de haber delimitado la //.
Además la sentencia WHILE/DO puede estar etiquetada por una etiqueta de inicio (BEGIN) y una de final (END) iguales.