Seguimos con los procedimientos almacenados. Vamos a ver como llevar a cabo el control de flujo de nuestro procedimiento. También es interesante observar el uso de las variables dentro de los procedimientos. Si se declara una variable dentro de un procedimiento mediante el código :
-
declare miVar int;
-
Esta tendrá un ámbito local y cuando se acabe el procedimiento no podrá ser accedida. Una vez la variable es declarada, para cambiar su valor usaremos la sentencia SET de este modo :
-
SET miVar = 56 ;
-
Para poder acceder a una variable a la finalización de un procedimiento se tiene que usar parámetros de salida.
Vamos a ver unos ejemplos para comprobar lo sencillo que es :
IF THEN ELSE
-
-
delimiter //
-
CREATE procedure miProc(IN p1 int) /* Parámetro de entrada */
-
begin
-
declare miVar int; /* se declara variable local */
-
SET miVar = p1 +1 ; /* se establece la variable */
-
IF miVar = 12 then
-
INSERT INTO lista VALUES(55555);
-
else
-
INSERT INTO lista VALUES(7665);
-
end IF;
-
end;
-
//
-
SWITCH
-
-
delimiter //
-
CREATE procedure miProc (IN p1 int)
-
begin
-
declare var int ;
-
SET var = p1 +2 ;
-
case var
-
when 2 then INSERT INTO lista VALUES (66666);
-
when 3 then INSERT INTO lista VALUES (4545665);
-
else INSERT INTO lista VALUES (77777777);
-
end case;
-
end;
-
//
-
Creo que no hacen falta explicaciones.
COMPARACIÓN DE CADENAS
-
-
delimiter //
-
CREATE procedure compara(IN cadena varchar(25), IN cadena2 varchar(25))
-
begin
-
IF strcmp(cadena, cadena2) = 0 then
-
SELECT "son iguales!";
-
else
-
SELECT "son diferentes!!";
-
end IF;
-
end;
-
//
-
La función strcmp devuelve 0 si las cadenas son iguales, si no devuelve 0 es que son diferentes.
USO DE WHILE
-
-
delimiter //
-
CREATE procedure p14()
-
begin
-
declare v int;
-
SET v = 0;
-
while v < 5 do
-
INSERT INTO lista VALUES (v);
-
SET v = v +1 ;
-
end while;
-
end;
-
//
-
Un while de toda la vida.
USO DEL REPEAT
-
-
delimiter //
-
CREATE procedure p15()
-
begin
-
declare v int;
-
SET v = 20;
-
repeat
-
INSERT INTO lista VALUES(v);
-
SET v = v + 1;
-
until v >= 1
-
end repeat;
-
end;
-
//
-
El repeat es similar a un “do while” de toda la vida.
LOOP LABEL
-
-
delimiter //
-
CREATE procedure p16()
-
begin
-
declare v int;
-
SET v = 0;
-
loop_label : loop
-
INSERT INTO lista VALUES (v);
-
SET v = v + 1;
-
IF v >= 5 then
-
leave loop_label;
-
end IF;
-
end loop;
-
end;
-
//
-
Este es otro tipo de loop, la verdad es que teniendo los anteriores no se me ocurre aplicación para usar este tipo de loop, pero es bueno saber que existe por si algún día te encuentras algún procedimiento muy antiguo que lo use. El código que haya entre loop_label : loop y end loop; se ejecutara hasta que se encuentre la sentencia leave loop_label; que hemos puesto en la condición, por lo tanto el loop se repetirá hasta que la variable v sea >= que 5.
El loop puede tomar cualquier nombre, es decir puede llamarse miLoop: loop, en cuyo caso se repetirá hasta que se ejecute la sentencia leave miLoop.
Con esto ya podemos empezar a crear procedimientos medianamente complejos y útiles.

