En programación, un Bucle es un tipo de estructura de control que permite repetir una o más sentencias múltiples veces. Todos los bucles se ejecutan mientras se cumpla una determinada condición , mientras esa condición sea verdadera, el bucle seguirá ejecutándose.
En PL/SQL tenemos a nuestra disposición los siguientes bucles:
LOOP
En PL/SQL tenemos a nuestra disposición los siguientes bucles:
- LOOP
- WHILE
- FOR
LOOP
El bucle LOOP, se
repite tantas veces como sea necesario hasta que se fuerza su salida con la
instrucción EXIT. Las sentencias dentro del bucle se ejecutarán durante un número indefinido de veces. Este tipo de bucle se denomina bucle incondicional.
LOOP
--
Instrucciones
IF (expresion) THEN
--
Instrucciones
EXIT;
END IF;
END LOOP;
Un tipo de bucle más común son los bucles condicionales. El bucle WHILE, se repite mientras que se cumpla cierta condición.
WHILE (condicion) LOOP
--
Instrucciones
END LOOP;FOR
El bucle FOR, se repite tanta veces como le indiquemos en las variables de contador. Este contador deberá ser una variable de tipo numérico que sea
capaz de contener los valores comprendidos entre limite_inferior y limite_superior,
los cuales deberán ser expresiones numéricas, ya sean constantes (1,10…) o
funciones (ROUND(max,0), ASCII(‘A’)…) .
FOR contador IN [REVERSE] inicio..final LOOP
--
Instrucciones
END LOOP;
En el caso de especificar REVERSE el bucle se recorre en
sentido inverso.
LOOPS en 11G
En la versión 11g podemos cancelar la iteración del loop actual y pasar a la siguiente, sin abortar el loop. Puede usarse simplemente CONTINUE o CONTINUE WHEN. En este último caso podremos evitar el uso de la sentencia IF para controlar la condición de salida de la iteración.
BEGIN
LOOP
...
CONTINUE WHEN condicion; --vuelve al comienzo del loop
-- si condicion=true, esta
parte no se ejecuta
...
END LOOP;
END;
La ventaja de de usar este código es que cualquier sentencia que se encuentre dentro del bucle entre el CONTINUE y el END LOOP no será ejecutada. Al no validar un caso termina el registro y pasa al siguiente registro del contador. Así facilitamos código y mejoramos el tiempo de lecturas.
LOOP
EXIT WHEN condicion;
i:=i+1;
var1 := getdata(i);
CONTINUE WHEN NOT var1;
var2 := convertdata(i);
CONTINUE WHEN NOT var2;
....
procesoRegistro(i);
END LOOP;
No hay comentarios:
Publicar un comentario