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;
/
Code Explicaciรณn:
- Code lรญnea 2: Imprimiendo el mensaje โPrograma iniciadoโ.
- Code lรญnea 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.
- Code lรญnea 5: Imprime el valor de 'a'.
- Code lรญnea 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.
- Code lรญnea 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;
/
Code Explicaciรณn:
- Code lรญnea 2: Declarar la variable 'b' como tipo de datos 'NรMERO'.
- Code lรญnea 4: Imprimiendo el mensaje โPrograma iniciadoโ.
- Code lรญnea 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.
- Code lรญnea 7: Restableciendo el valor de 'b' a '1' cada vez.
- Code lรญnea 8: Interior mientras bucle comprueba la condiciรณn a>=b.
- Code lรญnea 10: Imprime el valor de 'a' siempre que se cumpla la condiciรณn anterior.
- Code lรญnea 14: Imprimir la declaraciรณn โPrograma completadoโ
Resumen
| Loop | 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. |




