Oracle PL/SQL FOR LOOP con ejemplo

⚡ Resumen inteligente

Oracle El bucle FOR de PL/SQL ejecuta un bloque de código un número determinado de veces entre un límite inferior y uno superior. La variable del bucle se declara implícitamente y se incrementa automáticamente, por lo que no se necesita un contador manual. La palabra clave REVERSE permite que el bucle cuente hacia atrás.

  • 🔢 Mejores For: Un bucle FOR se adapta mejor a un número de iteraciones conocido que a una condición abierta.
  • 📏 Rango: Un límite inferior y un límite superior definen cuántas veces se ejecuta el bucle.
  • ⚙️ Contador implícito: La variable del bucle se declara automáticamente y se incrementa por sí sola.
  • 🎯 Alcance: La variable de bucle solo existe dentro del bucle.
  • 🔄 CONTRARRESTAR: Agregar REVERSE antes del límite inferior hace que el bucle cuente hacia atrás.
  • 🪜 Anidado: Los bucles pueden anidarse, y el bucle interno se ejecuta completamente en cada iteración externa.
  • 🚪 Salida automática: El bucle finaliza automáticamente cuando la variable sale del rango.

Oracle Bucle for de PL/SQL

¿Qué es un bucle FOR?

La instrucción "FOR LOOP" es la más adecuada cuando se desea ejecutar código un número conocido de veces, en lugar de en función de alguna otra condición.

En este bucle, se especifican un límite inferior y un límite superior, y mientras la variable del bucle se encuentre dentro de este rango, el bucle se ejecuta.

La variable del bucle es autoincremental, por lo que no se requiere ninguna operación de incremento explícita. No es necesario declarar la variable del bucle, ya que se declara implícitamente.

FOR <loop_variable> in <lower_limit> .. <higher_limit>
LOOP
<execution block starts>
.
.
.
<execution_block_ends>
END LOOP;

Explicación de sintaxis:

  • La palabra clave 'FOR' marca el inicio del bucle y 'END LOOP' marca el final.
  • La variable del bucle se evalúa cada vez antes de ejecutar la parte ejecutable.
  • El bloque de ejecución contiene todo el código que necesita ejecutarse y puede contener cualquier instrucción ejecutable.
  • La variable loop_variable se declara implícitamente durante la ejecución del bucle, y su ámbito de aplicación se limita al interior del bucle.
  • Cuando la variable del bucle sale del rango permitido, el control finaliza el bucle.
  • El bucle puede funcionar en orden inverso añadiendo la palabra clave 'REVERSE' antes de lower_limit.

Ejemplo 1: En este ejemplo, imprimimos los números del 1 al 5 utilizando un bucle FOR.

Bucle FOR que imprime los números del 1 al 5.

BEGIN
dbms_output.put_line('Program started.');
FOR a IN 1 .. 5
LOOP
dbms_output.put_line(a);
END LOOP;
dbms_output.put_line('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 inicio del bucle y se declara la variable de bucle 'a'. Ahora toma valores 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.
  • La línea 5 continúa ejecutándose hasta que 'a' alcanza el valor 6, momento en el que la condición falla y el control sale del bucle.
  • Code línea 7: Imprimiendo el mensaje “Programa completado”.

Bucles anidados

Las sentencias de bucle también pueden estar anidadas. Los bucles externo e interno pueden ser de diferentes tipos. En un bucle anidado, por cada iteración del bucle externo, el bucle interno se ejecuta por completo.

Estructura de bucle anidado

LOOP --outer
<execution block starts>
LOOP --inner
<execution_part>
END LOOP;
<execution_block_ends>
END LOOP;

Explicación de sintaxis:

  • El bucle exterior tiene otro bucle en su interior.
  • Los bucles pueden ser de cualquier tipo, y la funcionalidad de ejecución es la misma.

Ejemplo 1: En este ejemplo, imprimimos los números del 1 al 3 usando un bucle FOR. Cada número se imprime tantas veces como su valor.

Ejemplo de bucle FOR anidado, parte 1

Ejemplo de bucle FOR anidado, parte 2

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 dato 'NUMBER'.
  • Code línea 4: Imprimiendo el mensaje “Programa iniciado”.
  • Code línea 5: La palabra clave 'FOR' marca el inicio del bucle y se declara la variable de bucle 'a'. Ahora toma valores del 1 al 3.
  • Code línea 7: Restableciendo el valor de 'b' a '1' cada vez.
  • Code línea 8: El 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: Imprimiendo el mensaje “Programa completado”.

Bucle FOR y bucle FOR inverso

Por defecto, un bucle FOR cuenta hacia arriba desde el límite inferior hasta el límite superior. Agregar la palabra clave REVERSE hace que cuente hacia abajo mientras mantieneping Los límites en el mismo orden. Ambas formas se muestran juntas a continuación para que la diferencia quede clara.

Formulario Encabezado Orden de valores
ascendente PARA UN EN 1 .. 5 1, 2, 3, 4, 5
descendente PARA UN EN REVERSO 1 .. 5 5, 4, 3, 2, 1

Tenga en cuenta que incluso con REVERSE, el límite inferior se sigue escribiendo antes que el límite superior; solo cambia la dirección de la iteración. Para bucles cuyo conteo no se conoce de antemano, el bucle básico es la mejor opcion

Preguntas Frecuentes

No. El bucle FOR declara su variable implícitamente, y esta solo existe dentro del bucle. Declarar una variable con el mismo nombre fuera del bucle no afecta a la que utiliza el bucle.

REVERSE hace que el bucle itere desde el límite superior hasta el inferior. Los límites se siguen escribiendo de menor a mayor; solo se invierte el orden en que se visitan los valores.

Utilice un bucle FOR cuando se conozca de antemano el número de iteraciones, como por ejemplo un rango fijo. Utilice un bucle WHILE cuando el bucle deba continuar mientras se cumpla una condición y el contador no sea fijo.

Sí, cuando el bucle básico simplemente cuenta entre dos valores fijos. La IA puede reemplazar el contador manual y la salida con un bucle FOR, lo que acorta el código. Confirma que los límites coincidan con los originales.

No. La variable del bucle es de solo lectura dentro del bucle, por lo que asignarle un valor genera un error de compilación. Para modificar el flujo, utilice una variable independiente o salga del bucle con EXIT.

Resumir este post con: