Como implemento la sentencia WHILE?Es sencillo!, primero debes tener en cuenta cual es la condición que deseas que sea verdadera y luego establecer que instrucciones son las que quieres ejecutar en cada iteración.
Recuerda que una iteración es un recorrido del ciclo desde el inicio hasta el final. Las sintaxis del WHILE varían entre motores. A continuación te muestro las de MySQL y SQL Server:
WHILE <condición> instruciones
[etiqueta:] WHILE <condición> DO instruciones ENDWHILE[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 números 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;
DECLARE i INT DEFAULT 0;WHILE i <= 10 DO IF (i%2!=0) THEN SELECT i; END IF; SET i=i+1;
SQL Server MySQL
Aquí están los resultados:
Resulados en SQL Server 2008
Resultado XAMPP v3.2.1 - phpMyAdmin
Simplemente declaramos una variable llamada i que actúa como contador. Cada iteración el WHILE comprueba si el modulo entre 2 del número actual es distinto de 0, si es así se muestra el número, 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 permitirán terminar con fuerza un bucle o solo terminar una iteración sin ejecutar las sentencias restantes.
En el caso de SQL Server usaremos CONTINUE y BREAK. CONTINUE permitirá saltarse una iteración del bucle justo desde donde se ubicó, sin ejecutar ninguna instrucción de las que falta. BREAK en cambio, rompe el WHILE a la fuerza, terminando su ejecución 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;
DECLARE @i INT = 0;WHILE @i <= 10 BEGIN; IF (@i%2!=0) PRINT @i; IF @i=5 BREAK; SET @i=@i+1;
END;
CONTINUE BREAK
El código del lado derecho usa la sentencia CONTINUE para producir los números pares del 1 al 10. Si observas cada ves que hay un impar se salta la impresión y por ello no se tienen en cuenta los impares. En el segundo ejemplo se obtienen los impares solo hasta el número 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:
James Revelo Urrea - Desarrollador independiente