PostgreSQL 教程: PL/pgSQL 循环语句

八月 20, 2023

摘要:在本教程中,您将了解重复执行代码块的 PL/pgSQL 循环语句。

PL/pgSQL 循环语句简介

loop定义了一个无条件循环,该循环重复执行代码块,直到被exitreturn语句终止。

下面说明了loop语句的语法:

<<label>>
loop
   statements;
end loop;

通常,您可以在循环内使用if语句根据条件终止循环,如下:

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

可以将循环语句放置在另一个循环语句中。当一个loop语句放置在另一个loop语句内时,称为嵌套循环:

<<outer>>
loop 
   statements;
   <<inner>>
   loop
     /* ... */
     exit <<inner>>
   end loop;
end loop;

当有嵌套循环时,需要使用循环标签,以便可以在exitcontinue语句中指定它,以指示这些语句引用的是哪个循环。

PL/pgSQL 循环语句示例

下面的例子展示了如何使用loop语句来计算斐波那契数列。

do $$
declare
   n integer:= 10;
   fib integer := 0;
   counter integer := 0 ; 
   i integer := 0 ; 
   j integer := 1 ;
begin
	if (n < 1) then
		fib := 0 ;
	end if; 
	loop 
		exit when counter = n ; 
		counter := counter + 1 ; 
		select j, i + j into i,	j ;
	end loop; 
	fib := i;
    raise notice '%', fib; 
end; $$

输出:

NOTICE:  55

该代码块计算一个整数 (n) 的第 n 个斐波那契数。

根据定义,斐波那契数列是从 0 和 1 开始的整数序列,后面的每个数字都是前面两个数字的和,例如 1、1、2 (1+1)、3 (2+1)、 5 (3 +2)、8 (5+3)、……

在声明部分,counter变量被初始化为零 (0)。当counter等于n时,循环终止。以下 select 语句交换两个变量ij的值:

SELECT j, i + j INTO i,	j ;

在本教程中,您学习了如何使用 PL/pgSQL 循环语句来创建无条件循环。