Listado completo de tutoriales
100 - Control de flujo (loop) |
Las estructuras repetitivas permiten ejecutar una secuencia de sentencias varias veces. Hay tres estructuras repetitivas, o bucles: loop, for y while.
Comenzamos por "loop", que es la más simple. Veremos la sintaxis del bucle "loop" que combina una condición y la palabra "exit".
Sintaxis:
loop SENTENCIAS; exit when CONDICION; SENTENCIAS; end loop;
Cuando se llega a la línea de código en la que se encuentra la condición "exit when", se evalúa dicha condición, si resulta cierta, se salta a la línea donde se encuentra "end loop", saliendo del bucle, omitiendo las sentencias existentes antes del "end loop"; en caso contrario, si la condición resulta falsa, se continúa con las siguientes sentencias y al llegar a "end loop" se repite el bucle.
La sintaxis anterior es equivalente a la siguiente:
loop SENTENCIAS if CONDICION then exit; end if; SENTENCIAS end loop;
En este ejemplo se muestra la tabla del 3. Se va incrementando la variable "multiplicador" y se almacena en una variable "resultado"; el ciclo se repite hasta que el multiplicador llega a 5, es decir, 6 veces.
set serveroutput on;
declare
resultado number;
multiplicador number:=0;
begin
loop
resultado:=3*multiplicador;
dbms_output.put_line('3x'||to_char(multiplicador)||'='||to_char(resultado));
multiplicador:=multiplicador+1;
exit when multiplicador>5;
end loop;
end;
/
En el siguiente ejemplo se muestra la tabla del 4. Se va incrementando la variable "multiplicador" y se almacena en una variable "resultado"; el ciclo se repite hasta que la variable resultado llega o supera el valor 50.
declare
resultado number;
multiplicador number:=0;
begin
loop
resultado:=4*multiplicador;
exit when resultado>=50;
dbms_output.put_line('4x'||to_char(multiplicador)||'='||to_char(resultado));
multiplicador:=multiplicador+1;
end loop;
end;
/
Cuando se cumple la condición del "exit when" (supera el valor 50), no se ejecutan las sentencias siguientes (líneas de salida y de incremento de "multiplicador"), se salta a "end loop" finalizando el bucle.