Oracle PL/SQL FOR LOOP con ejemplo
ยฟQuรฉ es el bucle For?
La declaraciรณn "FOR LOOP" es mรกs adecuada cuando desea ejecutar un cรณdigo una cantidad conocida de veces en lugar de basarse en otras condiciones.
En este bucle, se especificarรกn el lรญmite inferior y el lรญmite superior y, siempre que la variable del bucle estรฉ entre este rango, se ejecutarรก el bucle.
La variable de bucle es autoincremental, por lo que no se necesita ninguna operaciรณn de incremento explรญcita en este bucle. No es necesario declarar la variable de bucle, ya que se declara de forma implรญcita.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Explicaciรณn de sintaxis:
- En la sintaxis anterior, la palabra clave "FOR" marca el comienzo del bucle y "END LOOP" marca el final del bucle.
- La variable de bucle se evalรบa cada vez antes de ejecutar la parte de ejecuciรณn.
- El bloque de ejecuciรณn contiene todo el cรณdigo que debe ejecutarse. La parte de ejecuciรณn puede contener cualquier declaraciรณn de ejecuciรณn.
- La variable_bucle se declara implรญcitamente durante la ejecuciรณn de todo el ciclo, y el alcance de esta variable_bucle serรก solo dentro de este ciclo.
- Si la variable del bucle saliรณ del rango, entonces el control saldrรก del bucle.
- Se puede hacer que el bucle funcione en orden inverso agregando la palabra clave "REVERSE" antes del lรญmite_inferior.
Ejemplo :En este ejemplo, vamos a imprimir nรบmeros del 1 al 5 mediante la instrucciรณn de bucle FOR. Para ello, ejecutaremos el siguiente cรณdigo.
BEGIN
dbms Qutput.put linef.Prp.gram started.' );
FOR a IN 1 .. 5
LOOP
dbms_output.put_line(a);
END LOOP:
dbms_output.put_iine('Program completed.');
END;
/
Explicaciรณn del cรณdigo:
- Lรญnea de cรณdigo 2: Imprimiendo el mensaje โPrograma iniciadoโ.
- Lรญnea de cรณdigo 3: La palabra clave 'FOR' marca el comienzo del bucle y se declara loop_variable 'a'. Ahora tendrรก el valor empezando del 1 al 5.
- Lรญnea de cรณdigo 5: Imprime el valor de 'a'.
- Lรญnea de cรณdigo 6: La palabra clave 'END LOOP' marca el final del bloque de ejecuciรณn.
- El cรณdigo de la lรญnea 5 continuarรก ejecutรกndose hasta que 'a' alcance el valor 6, ya que la condiciรณn fallarรก y el control SALIRร del bucle.
- Lรญnea de cรณdigo 7: Imprimir la declaraciรณn โPrograma completadoโ
Bucles anidados
Las sentencias de bucle tambiรฉn se pueden anidar. El bucle exterior e interior pueden ser de diferentes tipos. En el bucle anidado, por cada valor de iteraciรณn del bucle externo, el bucle interno se ejecutarรก completamente.
LOOP -outer <execution block starts> LOOP โ inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Explicaciรณn de sintaxis:
- En la sintaxis anterior, el bucle exterior tiene un bucle mรกs dentro.
- Los bucles pueden ser de cualquier tipo y la parte funcional de ejecuciรณn es la misma.
Ejemplo :En este ejemplo, vamos a imprimir nรบmeros del 1 al 3 utilizando la sentencia FOR. Cada nรบmero se imprimirรก tantas veces como su valor. Para ello, ejecutaremos el siguiente cรณdigo.
DECLARE
b NUMBER;
BEGIN
dbms output put line(โProgram started' );
FOR a IN 1..3
LOOP
b:=1;
WHILE (a>=b)
LOOP
dbms output put line(a);
b:=b+1;
END LOOP;โญ
END LOOP;โญ โฌ
dbms_output.put_line('Program completed' );
END;
/
Explicaciรณn del cรณdigo:
- Lรญnea de cรณdigo 2: Declarar la variable 'b' como tipo de datos 'NรMERO'.
- Lรญnea de cรณdigo 4: Imprimiendo el mensaje โPrograma iniciadoโ.
- Lรญnea de cรณdigo 5: La palabra clave 'FOR' marca el comienzo del bucle y se declara loop_variable 'a'. Ahora tendrรก el valor empezando del 1 al 3.
- Lรญnea de cรณdigo 7: Restableciendo el valor de 'b' a '1' cada vez.
- Lรญnea de cรณdigo 8: Interior mientras bucle comprueba la condiciรณn a>=b.
- Lรญnea de cรณdigo 10: Imprime el valor de 'a' siempre que se cumpla la condiciรณn anterior.
- Lรญnea de cรณdigo 14: Imprimir la declaraciรณn โPrograma completadoโ
Resumen
| el Bucle | En bucle |
|---|---|
| Criterio de salida | Salir cuando el contador llegue al lรญmite. |
| Uso | Es bueno usarlo cuando se conoce el recuento de bucles que se ejecutarรกn. |




