Tenemos estructuras repetitivas o bucles, como el while y for, como en el resto de lenguajes. Pero en PL/SQL tenemos uno nuevo llamado loop, que lo vamos a ver.
While
Igual que en otros lenguajes, esta es su sintaxis:
WHILE condition
LOOP
{...statements...}
END LOOP;
Fíjate que en PL/SQL, se pone LOOP, en todos los tipos de bucles se pone LOOP.
Vamos a ver un pequeño ejemplo. Mostrar los números del 1 al 10.
declare
i number(8) := 1;
begin
while (i<=10)
loop
DBMS_OUTPUT.PUT_LINE(i);
i := i+1;
end loop;
end;
/
For
Tiene esta sintaxis en PL/SQL:
FOR loop_counter IN [REVERSE] lowest_number..highest_number
LOOP
{...statements...}
END LOOP;
Veamos un ejemplo:
begin
for i in 1..10
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
/
La i es una variable local que solo se usa dentro del for, para decir que vaya de 1 a 10, lo hacemos asi: 1..10
Como siempre tenemos que poner Loop.
Si quieres que se inviertan los valores usamos reverse:
begin
for i in reverse 1..10
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
/
También se suele usar cuando tenemos rowtypes:
declare
cursor prod_pedido is
select p.nombre, dp.cantidad
from productos p, detallepedidos dp
where p.codigoproducto = dp.codigoproducto
and dp.CODIGOPEDIDO = p_codigopedido;
begin
for registro in prod_pedido loop
dbms_output.put_line('Se ha pedido del producto llamado '
|| registro.nombre || ': ' || registro.cantidad || ' unidades');
end loop;
end;
/
Loop
La sintaxis de Loop en PL/SQL es:
LOOP
{...statements...}
END LOOP;
La particularidad de Loop es que podemos poner la condición de salida donde queramos dentro del bucle con exit when, cuando se cumpla la condición saldrá del bucle.
declare
i number(8) := 1;
begin
loop
DBMS_OUTPUT.PUT_LINE(i);
exit when i=10;
i := i+1;
end loop;
end;
/
Este tipo de bucles se suele utilizar para recorrer cursores, por ejemplo:
declare
v_nombrecliente clientes.nombrecliente%type;
cursor clientes_cursor is
select *
from clientes;
begin
open clientes_sin_pagos_cursor;
loop
fetch clientes_cursor into v_nombrecliente;
exit when clientes_cursor%notfound;
dbms_output.put_line(v_nombrecliente);
end loop;
close clientes_cursor;
end;
/
Te dejo un vídeo de mi canal donde usamos bucles: https://www.youtube.com/watch?v=eef8wGLRaRE
Fuentes.
Artículo: "Bucles While, For Y Loop En PL/SQL" Publicado en https://discoduroderoer.es/ por el 04/09/2019. Consultado el 06/04/2024.
URL: https://discoduroderoer.es/bucles-while-for-y-loop-en-pl-sql/#google_vignette
No hay comentarios:
Publicar un comentario