Sunteți pe pagina 1din 3

hermosaprogramacion.

com

http://www.hermosaprogramacion.com/2014/06/mysql-sql-server-while/

El Bucle WHILE en SQL Server y MySQL


James
Revelo

La sentencia WHILE de SQL ejecuta una 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.

Como implemento la sentencia WHILE?


Es sencillo!, 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
instruciones

[etiqueta:] WHILE DO
instruciones
END WHILE [etiqueta]

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.

Tienes ejemplos?
Claro!, resolvamos el siguiente enunciado que requiere uso de un bucle WHILE:

Imprima en pantalla los nmeros impares del 1 al 10

Veamos:

DECLARE @i INT = 0;
WHILE @i <= 10
BEGIN;
IF (@i%2!=0)
PRINT @i
SET @i=@i+1;
END;
SQL Server

DECLARE i INT DEFAULT 0;


WHILE i <= 10 DO
IF (i%2!=0) THEN
SELECT i;
END IF;
SET i=i+1;

END WHILE;
MySQL

Aqu estn los resultados:

Simplemente declaramos una variable llamada i que acta como contador. Cada
iteracin el WHILE comprueba si el modulo entre 2 del nmero actual es distinto de
0, si es as se muestra el nmero, si no, no pasa nada.

Y que hago si quiero terminar el bucle antes?


Existen comandos especiales en cada gestor de base de datos que nos permitirn
terminar con fuerza un bucle o solo terminar una iteracin sin ejecutar las
sentencias restantes.
En el caso de SQL Server usaremos CONTINUE y BREAK. CONTINUE
permitir saltarse una iteracin del bucle justo desde donde se ubic, sin
ejecutar ninguna instruccin de las que falta. BREAK en cambio, rompe el
WHILE a la fuerza, terminando su ejecucin y siguiendo con normalidad.
Observa los siguientes ejemplos:

DECLARE @i INT = 0;
WHILE @i <= 10
BEGIN;
SET @i=@i+1;
IF (@i%2!=0)
CONTINUE;
PRINT @i;
END;
CONTINUE

Resulados en SQL Server 2008

DECLARE @i INT = 0;
WHILE @i <= 10
BEGIN;
IF (@i%2!=0)
PRINT @i;
IF @i=5
BREAK;
SET @i=@i+1;
Resultado XAMPP v3.2.1 phpMyAdmin

END;
BREAK

El cdigo del lado derecho usa la sentencia CONTINUE para producir los nmeros pares del 1 al 10. Si observas
cada ves que hay un impar se salta la impresin y por ello no se tienen en cuenta los impares. En el segundo
ejemplo 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.
Reconstruyamos los ejemplos anteriores y comprobemos estas dos sentencias:

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 WHILE bucle1;

DECLARE i INT DEFAULT 0;


bucle1:WHILE i <=
10 DO
IF (i%2!=0) THEN
SELECT i AS Numero impar;
END IF;
IF I=5 THEN
LEAVE bucle1;
END IF;
SET i=i+1;

END WHILE bucle1;


ITERATE

LEAVE

Al ejecutar estos ejemplos dentro de un procedimiento cualquiera de MySQL, obtendremos los mismos resultados
que en SQL Server:

S-ar putea să vă placă și