Oracle BUCLE PL/SQL con ejemplo

โšก Resumen inteligente

Los bucles PL/SQL ejecutan una secciรณn de cรณdigo repetidamente el nรบmero de veces deseado. PL/SQL ofrece bucles bรกsicos, FOR y WHILE, controlados por CONTINUE, EXIT, EXIT WHEN y GOTO, y pueden etiquetarse para gestionar estructuras anidadas de forma ordenada.

  • ๐Ÿ” Propรณsito: Un bucle ejecuta un bloque de cรณdigo muchas veces, lo que reduce el tamaรฑo y la complejidad del cรณdigo.
  • ๐Ÿงญ Contador de bucle: Una variable de contador determina la condiciรณn del bucle y debe cambiar para que el bucle pueda finalizar.
  • โญ๏ธ SEGUIR: Omite el resto de la iteraciรณn actual y comienza la siguiente.
  • ๐Ÿšช SALIDA / SALIDA CUANDO: Abandona el bucle inmediatamente, opcionalmente cuando se cumple una condiciรณn booleana.
  • ๐Ÿท๏ธ Etiquetas: Una etiqueta de bucle entre corchetes angulares dobles permite que EXIT se dirija a un bucle externo.
  • โ™พ๏ธ Bucle bรกsico: Se ejecuta hasta que se alcanza una salida explรญcita; sin ella, entra en un bucle infinito.
  • ๐Ÿงฉ Tres tipos: Los bucles bรกsicos, los bucles FOR y los bucles WHILE cubren los patrones comunes.

Oracle Bucle PL/SQL

ยฟQuรฉ son los bucles?

Los bucles permiten que una parte especรญfica del cรณdigo de un programa se ejecute el nรบmero de veces deseado. En este tutorial, analizaremos el concepto de bucle en PL/SQL y el flujo de control dentro de los bucles.

Introducciรณn al concepto de bucles

El concepto de bucles ofrece las siguientes ventajas en la programaciรณn:

  • Reutilizaciรณn del cรณdigo.
  • Tamaรฑo del cรณdigo reducido.
  • Flujo de control sencillo.
  • Complejidad reducida.

El diagrama a continuaciรณn muestra el baรฑo.ping concepto.

lavaboping Flujo de conceptos en PL/SQL

En el diagrama anterior, se comprueba la condiciรณn del bucle y, siempre que se cumpla, se ejecuta el bloque de ejecuciรณn.

En cada iteraciรณn, la variable del contador del bucle, que determina si la condiciรณn del bucle debe cambiar para que el control salga del bucle, en algunos casos se trata de un incremento o decremento predefinido, y en otros, de una condiciรณn de bรบsqueda que mantiene la ejecuciรณn del bloque hasta que se cumple.

Declaraciones de control de bucle

Antes de aprender el concepto de bucles, es importante aprender las instrucciones de control de bucle. Estas instrucciones controlan el flujo de ejecuciรณn dentro de un bucle.

CONTINUAR

Esta palabra clave indica al motor PL/SQL que, siempre que encuentre CONTINUE dentro de un bucle, omita el cรณdigo restante en el bloque de ejecuciรณn e inicie la siguiente iteraciรณn inmediatamente. Esto se utiliza principalmente cuando se debe omitir el cรณdigo dentro del bucle para ciertos valores de iteraciรณn.

SALIR / SALIR CUANDO

Esta palabra clave indica al motor PL/SQL que salga inmediatamente del bucle actual. En un bucle anidado, EXIT dentro del bucle interno solo finaliza el bucle interno, no el externo. 'EXIT WHEN' va seguido de una expresiรณn que devuelve un valor booleano; si el resultado es VERDADERO, se finaliza el control.

GOTO

Esta instrucciรณn transfiere el control a una instrucciรณn etiquetada (โ€œGOTO ;โ€). Tiene las siguientes restricciones:

  • La transferencia de control sรณlo se puede realizar dentro de los subprogramas.
  • No es posible transferir el control desde la parte de manejo de excepciones a la parte de ejecuciรณn.

No se recomienda utilizar esta instrucciรณn a menos que no haya alternativa, debido al control del cรณdigo. tracLa capacidad se vuelve muy difรญcil cuando el control se transfiere de una parte a otra.

Tipos de bucle en PL/SQL

PL / SQL Proporciona los siguientes tres tipos de bucles:

La tabla que aparece a continuaciรณn compara los tres antes de que se explique en detalle el bucle bรกsico.

Loop Criterio de salida Mejores usados โ€‹โ€‹cuando
Bucle bรกsico SALIDA explรญcita en el bloque La salida no se basa en un recuento o condiciรณn fija.
En bucle El contador llega al final de su rango. El nรบmero de iteraciones se conoce de antemano.
Bucle WHILE La condiciรณn se vuelve falsa El bucle debe ejecutarse mientras se cumpla una condiciรณn.

Declaraciรณn de bucle bรกsico

Esta 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 'END LOOP'. La condiciรณn de salida debe especificarse dentro del bloque de ejecuciรณn para que el control salga del bucle, y la palabra clave EXIT debe indicarse explรญcitamente.

Estructura bรกsica de bucle en PL/SQL

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

Explicaciรณn de sintaxis:

  • La palabra clave 'LOOP' marca el inicio del bucle y 'END LOOP' marca el final.
  • 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 instrucciรณn ejecutable.

Nota: Una instrucciรณn de bucle bรกsica sin la palabra clave EXIT es un bucle infinito que nunca se detiene.

Ejemplo 1: En este ejemplo, imprimimos los nรบmeros del 1 al 5 utilizando una instrucciรณn de bucle bรกsica.

Impresiรณn bรกsica de bucles con los nรบmeros del 1 al 5.

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;
/

Code Explicaciรณn:

  • Code lรญnea 2: Declarar la variable 'a' como 'NUMBER' e inicializarla con el valor '1'.
  • Code lรญnea 4: Imprimiendo el mensaje โ€œPrograma iniciadoโ€.
  • Code lรญnea 5: La palabra clave 'LOOP' marca el inicio del bucle.
  • Code lรญnea 6: Imprime el valor de 'a'.
  • Code lรญnea 7: Incrementa el valor de 'a' en 1.
  • Code lรญnea 8: Comprueba si el valor de 'a' es mayor que 5.
  • Code lรญnea 9: La palabra clave 'END LOOP' marca el final del bloque de ejecuciรณn.
  • Las lรญneas 6 a 8 continรบan ejecutรกndose hasta que 'a' llega a 6, momento en el que la condiciรณn devuelve VERDADERO y el control sale del bucle.
  • Code lรญnea 10: Imprimiendo el mensaje โ€œPrograma completadoโ€.

Etiquetado de bucles

En PL/SQL, los bucles pueden etiquetarse. La etiqueta debe ir entre โ€œ<<โ€ y โ€œ>>โ€. Etiquetar los bucles, especialmente los anidados, mejora la legibilidad. La etiqueta se puede especificar en un comando EXIT para salir de ese bucle en particular, de modo que el control puede salir directamente del bucle externo de una estructura anidada mediante el comando EXIT seguido de la etiqueta del bucle externo.

Estructura de bucle anidado etiquetada

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

Explicaciรณn de sintaxis:

  • El bucle exterior tiene otro bucle en su interior.
  • '< >' y '< >' son las etiquetas de estos bucles.

Ejemplo 1: En este ejemplo, imprimimos nรบmeros a partir del 1 mediante un bucle bรกsico. Cada nรบmero se imprime tantas veces como su valor. El lรญmite superior de la serie se define en la declaraciรณn. Para ello, utilizamos el concepto de etiqueta.

Ejemplo de bucle etiquetado, parte 1Ejemplo de bucle etiquetado, parte 2

DECLARE
a NUMBER:= 0;
b NUMBER;
upper_limit NUMBER := 4;
BEGIN
dbms_output.put_line('Program started.');
<<outer_loop>>
LOOP
a:= a+1;
b:= 1;
<<inner_loop>>
LOOP
EXIT outer_loop WHEN a > upper_limit;
dbms_output.put_line(a);
b:= b+1;
EXIT inner_loop WHEN b>a;
END LOOP;
END LOOP;
dbms_output.put_line('Program completed.');
END;
/

Code Explicaciรณn:

  • Code lรญneas 2-3: Declarar las variables 'a' y 'b' como tipo de datos 'NUMBER'.
  • Code lรญnea 4: Declarar la variable 'upper_limit' como 'NUMBER' con valor '4'.
  • Code lรญnea 6: Imprimiendo el mensaje โ€œPrograma iniciadoโ€.
  • Code lรญnea 7: El bucle exterior estรก etiquetado como โ€œouter_loopโ€.
  • Code lรญnea 9: El valor de 'a' se incrementa en 1.
  • Code lรญnea 11: El bucle interno estรก etiquetado como โ€œinner_loopโ€.
  • Code lรญnea 13: Condiciรณn de salida que comprueba si 'a' es mayor que el valor de 'upper_limit'. Si no lo es, continรบa; de lo contrario, sale directamente del bucle exterior.
  • Code lรญnea 14: Imprimiendo el valor de 'b'.
  • Code lรญnea 15: Incrementa el valor de 'b' en 1.
  • Code lรญnea 16: Condiciรณn de salida que comprueba si 'b' es mayor que 'a'. Si es asรญ, sale del bucle interno.
  • Code lรญnea 19: Imprimiendo el mensaje โ€œPrograma completadoโ€.

Preguntas Frecuentes

EXIT sale del bucle incondicionalmente. EXIT WHEN sale de รฉl solo cuando la siguiente expresiรณn booleana es verdadera, lo que elimina la necesidad de un IF separado alrededor de un simple EXIT.

Una etiqueta permite que una instrucciรณn EXIT en un bucle interno abandone un bucle externo con nombre en un solo paso. Tambiรฉn hace que el cรณdigo anidado sea mucho mรกs fรกcil de leer que tracSentencias FIN DE BUCLE simples del rey.

Si el bloque no tiene una condiciรณn de salida, o el contador nunca alcanza dicha condiciรณn, el bucle nunca se detiene. Asegรบrese siempre de que el contador se acerque a la condiciรณn de salida.

A menudo, sรญ. La IA puede trace si el contador se mueve hacia la condiciรณn de SALIDA y advertir cuando un bucle no tiene una salida alcanzable, aunque una salida dependiente de datos todavรญa necesita una ejecuciรณn de prueba para confirmar.

La instrucciรณn CONTINUE omite el resto de la iteraciรณn actual y pasa a la siguiente. Es รบtil cuando se deben ignorar ciertos valores sin salir completamente del bucle.

Resumir este post con: