PostgreSQL – Declaración de bucle

La declaración de bucle se usa simplemente para definir un bucle incondicional que ejecuta declaraciones de código repetidamente hasta que finaliza después de encontrar una declaración de retorno o salida.

Sintaxis:

<<label>>
loop
  statements/body;
end loop;

En la sintaxis anterior, idealmente debemos hacer lo siguiente:

  • Condición para la terminación : Deberíamos tratar de definir una condición en el cuerpo del bucle hasta el cual se ejecuta nuestro bucle. Tan pronto como esta condición falle, el bucle terminará. Si no definimos una condición de terminación, el bucle se ejecuta infinitas veces y nos encontramos con el caso de un bucle infinito.
     
  • Incremento/Decremento: Deberíamos tratar de incluir una declaración de incremento o decremento dentro del cuerpo para aumentar o disminuir la variable en ejecución. Si no cambiamos el valor de la variable, el ciclo se atasca en la misma condición una y otra vez y nos encontramos con el caso de un ciclo infinito.

Para terminar la ejecución del ciclo, simplemente podemos incluir una declaración if con una declaración exit con la siguiente sintaxis:

<<label>>
loop
  statements;
  if condition then
     exit;
  end if;
end loop;

Una condición cuando colocamos un bucle dentro de otro bucle se llama bucle anidado. Es importante tener en cuenta que cada vez que usamos bucles anidados, debemos definir las etiquetas de bucle en las instrucciones exit o continue para mostrar con precisión a qué bucle nos referimos.

<<outer>>
loop  
  statements;
  <<inner>>
  loop
    inside statements;
    exit <<inner>>
  end loop;
end loop;

Ejemplo 1:

El siguiente ejemplo muestra cómo usar la instrucción loop para imprimir todos los números del 1 al 5.

do $$
declare
  n integer:= 6;
  cnt integer := 1 ;  
begin
loop  
 exit when cnt = n ;
 raise notice '%', cnt;  
 cnt := cnt + 1 ;  
end loop;  
end; $$;

Producción:

En el ejemplo anterior, definimos una variable cnt cuyo valor aumenta en cada iteración. El valor de cnt se imprime hasta que alcanza nuestro valor máximo de n, después de lo cual finaliza el bucle. 

Ejemplo 2:

El siguiente ejemplo muestra cómo usar la sentencia loop para imprimir todos los números del 10 al 1.

do $$
declare
 n integer:= 0;
 cnt integer := 10 ;  
begin
loop  
exit when cnt = n ;
raise notice '%', cnt;  
cnt := cnt - 1 ;  
end loop;  
end; $$;

Producción:

En el ejemplo anterior, definimos una variable cnt cuyo valor disminuye en cada iteración. El valor de cnt se imprime hasta que alcanza nuestro valor mínimo de n, después de lo cual finaliza el bucle.

Publicación traducida automáticamente

Artículo escrito por ashutoshrathi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *