Ya que hemos visto las estructuras de control condicional, veamos ahora las estructuras de control iterativo.
Control iterativo.
Estas estructuras nos permiten ejecutar una secuencia de sentencias un determinado número de veces.
LOOP
: La forma más simple es el bucle infinito, cuya sintaxis es:LOOP secuencia_de_sentencias; END LOOP;
EXIT
: Con esta sentencia forzamos a un bucle a terminar y pasa el control a la siguiente sentencia después del bucle. UnEXIT
no fuerza la salida de un bloque PL/SQL, sólo la salida del bucle.LOOP ... IF encontrado = TRUE THEN EXIT; END IF; END LOOP;
DECLARE a integer :=1; BEGIN LOOP dbms_output.put_line(a); IF a>9 THEN EXIT; END IF; a:=a+1; END LOOP; END; /
EXIT WHEN condicion
: Fuerza a salir del bucle cuando se cumple una determinada condición.LOOP ... EXIT WHEN encontrado; END LOOP;
DECLARE a integer :=1; BEGIN LOOP dbms_output.put_line(a); EXIT WHEN a>9; a:=a+1; END LOOP; END; /
WHILE LOOP
: Este tipo de bucle ejecuta la secuencia de sentencias mientras la condición sea cierta.
WHILE condicion LOOP
Secuencia_de_sentencias;
END LOOP;
DECLARE
a integer :=1;
BEGIN
WHILE a<10 LOOP
dbms_output.put_line(a);
a:=a+1;
END LOOP;
END;
/
FOR LOOP
: Este bucle itera mientras el contador se encuentre en el rango definido.
FOR contador IN [REVERSE] limite_inferior..limite_superior LOOP
Secuencia_de_sentencias;
END LOOP;
DECLARE
a NUMBER;
BEGIN
FOR a IN 1..10 LOOP -- ascendente de uno en uno
dbms_output.put_line(a);
END LOOP;
FOR a IN REVERSE 1..10 LOOP -- descendente de uno en uno
dbms_output.put_line(a);
END LOOP;
END;
/
Bucle infinito es aquel ciclo que se repite de forma indefinida, ya que su condición para finalizar nunca se cumple o no tiene dicha condición