Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniera de Sistemas
Sesin 12
Constructores de Control de Flujo
Pag. 139
Base de Datos II
Ingeniera de Sistemas
Seguimos con los procedimientos almacenados. Vamos a ver cmo llevar a cabo el control de flujo
de nuestro procedimiento. Tambin es interesante observar el uso de las variables dentro de los
procedimientos. Si se declara una variable dentro de un procedimiento mediante el cdigo:
DECLARE miVar TIPO DE DATO;
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 = Valor;
Para poder acceder a una variable a la finalizacin de un procedimiento se tiene que usar
parmetros de salida.
IF THEN ELSE
Ejemplo 1: Crear un procedimiento almacenado que realice el mantenimiento de la Tabla
devoluciones (Insertar y Actualizar)
Pag. 140
Base de Datos II
Ingeniera de Sistemas
Pag. 141
Base de Datos II
Ingeniera de Sistemas
USO DE WHILE
La sentencia WHILE de SQL ejecuta un conjunto de instrucciones varias veces, mientras la
condicin por la cual se rige sea verdadera. Si en algn momento es falsa el bucle se termina
Para implementarla, primero debes tener en cuenta cual es la condicin que deseas que sea
verdadera y luego establecer que instrucciones son las que quieres ejecutar en cada iteracin.
Recuerda que una iteracin es un recorrido del ciclo desde el inicio hasta el final. Las sintaxis del
WHILE varan entre motores. A continuacin te muestro las de MySQL y SQL Server:
WHILE <condicin>
instruciones
MS SQL Server
MySQL
MySQL permite la posibilidad de agregar etiquetas al WHILE para mejor legibidad del texto. SQL
Server no requiere una sentencia END para cerrar el bucle. Otra diferencia es que MySQL usa la
palabra reservada DO para indicar las instrucciones que van dentro del bucle. Y Si deseamos
ejecutar varias instrucciones dentro del WHILE en SQL Server debemos crear un bloque de
instrucciones.
DECLARE @i INT = 0;
WHILE @i <= 10
BEGIN;
IF (@i%2!=0)
PRINT @i
END WHILE;
SET @i=@i+1;
END;
MS SQL Server
MySQL
Pag. 142
Base de Datos II
Ingeniera de Sistemas
MS SQL Server
CONTINUE DECLARE @i INT = 0;
WHILE @i <= 10
BEGIN;
SET @i=@i+1;
IF (@i%2!=0)
CONTINUE;
PRINT @i;
BREAK
MySQL
DECLARE i INT DEFAULT 0;
bucle1: WHILE i <= 10 DO
SET i=i+1;
IF (i%2!=0) THEN
ITERATE bucle1;
END IF;
SELECT i AS Numero par';
END;
DECLARE @i INT = 0;
WHILE @i <= 10
bucle1:WHILE i <=
10 DO
BEGIN;
IF (i%2!=0) THEN
IF (@i%2!=0)
SELECT i AS Nmero impar';
PRINT @i;
END IF;
IF @i=5
BREAK;
SET @i=@i+1;
END;
IF I=5 THEN
LEAVE bucle1;
END IF;
SET i=i+1;
END WHILE bucle1;
El cdigo del lado Izquierdo del SQL Server usa la sentencia CONTINUE para producir los
nmeros pares del 1 al 10. Si observas cada vez que hay un impar se salta la impresin y por ello
no se tienen en cuenta los impares. En el segundo ejemplo del SQL Server se obtienen los impares
solo hasta el nmero 5, ya que cerramos el bucle con BREAK de forma inmediata cuando la
variable @i es igual a 5.
MySQL tiene comandos equivalentes a CONTINUE y BREAK. Ellos son ITERATE y LEAVE.
Ambas sentencias deben usarse con una etiqueta del WHILE para poder funcionar. Al ejecutar
estos ejemplos dentro de un procedimiento cualquiera de MySQL, obtendremos los mismos
resultados que en SQL Server.
Pag. 143
Base de Datos II
Ingeniera de Sistemas
Estructura GOTO
La sentencia GOTO nos permite desviar el flujo de ejecucin hacia una etiqueta. Fu muy
utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema
@@ERROR para el control de errores.
Actualmente, se desaconseja el uso GOTO, recomendndose el uso de TRY - CATCH para la
gestin de errores.
Pag. 144