domingo, 7 de abril de 2024

Bucles While, For Y Loop En PL/SQL

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