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.

ยฟ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.
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:
- Declaraciรณn de bucle bรกsico
- Para declaraciรณn de bucle
- Declaraciรณn de bucle while
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.
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.
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.
<<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.
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โ.






