Oracle PL / SQL LOOP con ejemplo

Tabla de contenido:

Anonim

¿Qué son los bucles?

Los bucles permiten que una determinada parte del código de un programa se ejecute el número de veces deseado.

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

  • Introducción al concepto de bucles
  • Declaraciones de control de bucle
  • Tipos de bucle en PL / SQL
  • Declaración básica de bucle
  • Etiquetado de 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 manera pictórica

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 de contador de bucle que realmente decide la condición del bucle debe modificarse para hacer que el control salga del bucle. En algunos casos, esta variable de contador de bucle es un operador de incremento / decremento para un recuento predefinido y, en algunos casos, es una condición de búsqueda que sigue ejecutando el bloque hasta que lo satisface.

Declaraciones de control de bucle

Antes de aprender el concepto de bucles, es obligatorio conocer las instrucciones de control de bucles. Las sentencias 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.

SEGUIR

Esta palabra clave envía una instrucción al motor PL / SQL que siempre que el motor PL / SQL encuentra esta palabra clave dentro del ciclo, saltará 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 siempre que el motor PL / SQL encuentra esta palabra clave, saldrá inmediatamente del ciclo actual. Si el motor PL / SQL encuentra el EXIT en un bucle anidado, entonces saldrá del bucle en el que se ha definido, es decir, en un bucle anidado, dando EXIT en el bucle interno solo saldrá del control del bucle interno pero no del bucle exterior. 'EXIT WHEN' va seguido de una expresión que da un resultado booleano. Si el resultado es VERDADERO, entonces el control SALIRÁ.

IR

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

  • La transferencia de control solo se puede realizar dentro de los subprogramas.
  • No se puede transferir el control de 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 de 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
  • Para declaración de bucle
  • Mientras que declaración de bucle

Declaración básica de bucle

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.

LOOPEND LOOP;
Explicación de la 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 EXIT.
  • La parte de ejecución puede contener cualquier declaración de ejecución.

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

Ejemplo 1 : En este ejemplo, imprimiremos el número del 1 al 5 usando una declaración de bucle básica. Para eso, ejecutaremos el siguiente código.

DECLAREa NUMBER:=1;BEGINdbms_output.put_line('Program started.');LOOPdbms_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 'NUMBER' e inicializarla con el valor '1'.
  • Línea de código 4 : Impresión de la declaración "Programa iniciado".
  • Línea de código 5: La palabra clave 'LOOP' marca el comienzo del ciclo.
  • Línea de código 6: imprime el valor de 'a'.
  • Línea de código 7: aumenta 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á TRUE y el control SALIRÁ del ciclo.
  • Línea de código 10: Impresión de la declaración "Programa completado"

Etiquetado de bucles

En PL / SQL, los bucles se pueden etiquetar. La etiqueta debe estar entre "<<" y ">>". El etiquetado de bucles, especialmente en códigos de bucle anidados, proporcionará una mayor legibilidad. La etiqueta se puede dar en el comando EXIT para salir de ese bucle en particular. Usando 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.

<>LOOP  . <> LOOP --inner  END LOOP; . END LOOP;
Explicación de la sintaxis:
  • En la sintaxis anterior, el bucle de salida tiene un bucle más dentro.
  • El '<>' y '<>' son las etiquetas de estos bucles.

Ejemplo 1 : En este ejemplo, imprimiremos un número empezando por 1 usando la instrucció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 lograrlo. Para eso, ejecutaremos el siguiente código

DECLAREa NUMBER:=0;b NUMBER;upper-limit NUMBER :=4;BEGINdbms_output.put_line(‘Program started.' );«outerloop»‭ ‬LOOPa:=a+1;b:=l;«inner loop»LOOPEXIT 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 : Declaración de la variable 'a' y 'b' como tipo de datos 'NUMBER'.
  • Línea de código 4 : declarar la variable 'límite_uperior' como tipo de datos 'NÚMERO' con valor '4'
  • Línea de código 6 : Impresión de la declaración "Programa iniciado".
  • Línea de código 7: el bucle externo se ha etiquetado como "bucle_externo"
  • Línea de código 9: el valor de 'a' se incrementa en 1.
  • Línea de código 11: El bucle interno se ha 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: Impresión del valor de 'b'.
  • Línea de código 15: aumenta el valor de 'b' en +1.
  • Línea de código 16: condición EXIT 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: Impresión de la declaración "Programa completado"

Resumen

Lazo Bucle básico
Criterio de salida Salir cuando encuentra la palabra clave 'EXIT' en la parte de ejecución
Uso Bueno para usar cuando la salida no se basa en ninguna condición en particular.