Oracle BUCLE PL/SQL con ejemplo

¿Qué son los bucles?

Los bucles permiten que una determinada parte del código de un programa se ejecute la cantidad de veces deseada.

En este tutorial, veremos el concepto de bucle en PL/SQL y el flujo de control en bucles.

Introducción al concepto de bucles

El concepto de bucles proporciona la siguiente ventaja en la codificación.

  • Reutilización del código
  • Tamaño de código reducido
  • Fácil flujo de control
  • Complejidad reducida

El siguiente diagrama muestra el concepto de bucle de forma gráfica.

Oracle BUCLE PL/SQL

En el diagrama anterior, se verificará la condición del bucle y, siempre que se cumpla la condición del bucle, se ejecutará el bloque de ejecución.

En cada iteración, la variable del contador de bucle que realmente decide la condición del bucle debe modificarse para que el control salga del bucle. En algunos casos, esta variable de contador de bucle es un operador de incremento/disminución para un recuento predefinido y, en algunos casos, es una condición de búsqueda que continúa ejecutando el bloque hasta que lo satisface.

Declaraciones de control de bucle

Antes de aprender el concepto de bucles, es obligatorio conocer las declaraciones de control de bucles. Las declaraciones de control de bucle son aquellas que realmente controlan el flujo de ejecución dentro del bucle. A continuación se muestra la descripción detallada de las declaraciones de control de bucle.

CONTINUAR

Esta palabra clave envía una instrucción al motor PL/SQL que cada vez que el motor PL/SQL encuentre esta palabra clave dentro del bucle, omitirá el código restante en el bloque de ejecución del código y la siguiente iteración comenzará inmediatamente. Esto se utilizará principalmente si el código dentro del bucle desea omitirse para ciertos valores de iteración.

SALIR / SALIR CUANDO

Esta palabra clave envía una instrucción al motor PL/SQL que cada vez que el motor PL/SQL encuentre esta palabra clave, saldrá inmediatamente del bucle actual. Si el motor PL/SQL encuentra EXIT en un bucle anidado, entonces saldrá del bucle en el que se ha definido, es decir, en un bucle anidado, al dar EXIT en el bucle interno solo se saldrá del control del bucle interno, pero no desde el bucle exterior. 'SALIR CUANDO' va seguido de una expresión que da un resultado booleano. Si el resultado es VERDADERO, entonces el control SALDRÁ.

GOTO

Esta instrucción transferirá el control a la instrucción etiquetada (“GOTO ;”). Esto tiene las siguientes restricciones

  • La transferencia de control sólo se puede realizar dentro de los subprogramas.
  • La transferencia de control no se puede realizar desde la parte de manejo de excepciones a la parte de ejecución.

No se recomienda el uso de esta declaración a menos que no haya otras alternativas, ya que la trazabilidad del control del código será muy difícil en el programa debido a la transferencia de control de una parte a otra.

Tipos de bucle en PL/SQL

PL / SQL Proporciona los siguientes tres tipos de bucles

Declaración de bucle básico

Esta declaración de bucle es la estructura de bucle más simple en PL/SQL. El bloque de ejecución comienza con la palabra clave "LOOP" y termina con la palabra clave "END LOOP".

La condición de salida debe darse dentro de este bloque de ejecución para que el control salga del bucle.

Necesita que la palabra clave EXIT se proporcione explícitamente en la parte de ejecución para salir del bucle.

Declaración de bucle básico

 LOOP
<execution block starts>
<EXIT condition based on developer criteria> 
<execution_block_ends>
END LOOP;

Explicación de sintaxis:

  • En la sintaxis anterior, la palabra clave "LOOP" marca el comienzo del bucle y "END LOOP" marca el final del bucle.
  • El bloque de ejecución contiene todo el código que debe ejecutarse, incluida la condición de SALIDA.
  • La parte de ejecución puede contener cualquier declaración de ejecución.

Nota: La declaración de bucle básica sin palabra clave EXIT será un BUCLE INFINITO que nunca se detendrá.

Ejemplo :En este ejemplo, vamos a imprimir números del 1 al 5 mediante una instrucción de bucle básica. Para ello, ejecutaremos el siguiente código.

Declaración de bucle básico

DECLARE 
a NUMBER:=1; 
BEGIN
dbms_output.put_line('Program started.');
LOOP
dbms_output.put_line(a);
a:=a+1;
EXIT WHEN a>5;
END LOOP;
dbms_output.put_line('Program completed');
END:
/

Explicación del código:

  • Línea de código 2: Declarar la variable 'a' como tipo de datos 'NÚMERO' e inicializarla con el valor '1'.
  • Línea de código 4: Imprimiendo el mensaje “Programa iniciado”.
  • Línea de código 5: La palabra clave 'LOOP' marca el comienzo del bucle.
  • Línea de código 6: Imprime el valor de 'a'.
  • Línea de código 7: Incrementa el valor de 'a' en +1.
  • Línea de código 8: Comprueba si el valor de 'a' es mayor que 5.
  • Línea de código 9: La palabra clave 'END LOOP' marca el final del bloque de ejecución.
  • El código de la línea 6 a la línea 8 continuará ejecutándose hasta que 'a' alcance el valor 6, ya que la condición devolverá VERDADERO y el control SALIRÁ del bucle.
  • Línea de código 10: Imprimir la declaración “Programa completado”

Etiquetado de bucles

En PL/SQL, los bucles se pueden etiquetar. La etiqueta debe estar entre “>”. El etiquetado de bucles, especialmente en códigos de bucles anidados, proporcionará una mayor legibilidad. La etiqueta se puede proporcionar en el comando EXIT para salir de ese bucle en particular. Usando la etiqueta, se puede hacer que el control salga directamente del bucle externo de los bucles anidados desde cualquier lugar dentro de los bucles, dando el comando de salida seguido de la etiqueta del bucle externo.

Etiquetado de bucles

<<OUTER_LOOP>>
LOOP 
	<execution_block_starts>
	.
	<<INNER_LOOP>>
	LOOP --inner
		<execution_part>
	END LOOP;
	.
	<executi_block_ends>
END LOOP;

Explicación de sintaxis:

  • En la sintaxis anterior, el bucle de salida tiene un bucle más dentro.
  • El '>' y el '>' son las etiquetas de estos bucles.

Ejemplo :En este ejemplo, vamos a imprimir un número a partir del 1 utilizando la declaración de bucle básico. Cada número se imprimirá tantas veces como su valor. El límite superior de la serie se fija en la parte de declaración del programa. Aprendamos cómo podemos usar el concepto de etiqueta para lograr esto. Para eso, ejecutaremos el siguiente código

Etiquetado de buclesEtiquetado de bucles

DECLARE
a NUMBER:=0;
b NUMBER;
upper-limit NUMBER :=4;
BEGIN
dbms_output.put_line(‘Program started.' ); 
«outerloop»‭	‬
LOOP 
a:=a+1;
b:=l;
«inner loop»
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:=b+l;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Explicación del código:

  • Línea de código 2-3: Declarar la variable 'a' y 'b' como tipo de datos 'NÚMERO'.
  • Línea de código 4: Declarar la variable 'upper_limit' como tipo de datos 'NÚMERO' con valor '4'
  • Línea de código 6: Imprimiendo el mensaje “Programa iniciado”.
  • Línea de código 7: El bucle exterior ha sido etiquetado como "outer_loop"
  • Línea de código 9: El valor de 'a' se incrementa en 1.
  • Línea de código 11: El bucle interno ha sido etiquetado como "inner_loop".
  • Línea de código 13: Condición de SALIDA que verifica si el valor 'a' es mayor que el valor 'límite_superior'. De lo contrario, irá más lejos; de lo contrario, saldrá directamente del bucle exterior.
  • Línea de código 14: Imprimiendo el valor de 'b'.
  • Línea de código 15: Incrementa el valor de 'b' en +1.
  • Línea de código 16: Condición de SALIDA que comprueba si el valor de 'b' es mayor que 'a'. Si es así, saldrá del control del bucle interno.
  • Línea de código 14: Imprimir la declaración “Programa completado”

Resumen

Red ISTE Loop Bucle básico
Criterio de salida Salga cuando encuentre la palabra clave "EXIT" en la parte de ejecución
Uso Es bueno usarlo cuando la salida no se basa en ninguna condición en particular.