loop循环
1、语法:
loop
exit when condition;
statement;
end loop;
案例:
create or replace function loop_test(n integer)
returns integer as $$
declare
counter integer :=0;
begin
if n<0 then
return 0;
end if;
loop
exit when counter = n;
counter := counter +1;
end loop;
return counter;
end; $$
language plpgsql;
select loop_test(4)
结果:4
while循环
2、语法:
while condition loop
statement;
end loop;
案例:
create or replace function while_test(n integer)
returns integer as $$
declare counter integer:=0;
begin
if (n<0) then
return 0;
end if;
while counter<n loop
counter := counter + 1;
end loop;
return counter;
end; $$
language plpgsql;
select while_test(4);
for循环
3、语法:
for loop_counter in [reverse] from..to [by exepression] loop
statement;
end loop;
from..to指最小值..最大值 的一个范围,如:1..5
案例1:
create or replace function for_test1()
returns integer as $$
declare counter integer:=0;
begin
for i in 1..5 loop
counter := counter+i;
end loop;
return counter;
end; $$
language plpgsql;
结果:
15
案例2:
do $$
begin
for counter in reverse 5..1 loop
raise notice 'counter is %',counter;
end loop;
end; $$
结果:
> 注意: counter is 5
> 注意: counter is 4
> 注意: counter is 3
> 注意: counter is 2
> 注意: counter is 1
案例3:
do $$
begin
for counter in 1..5 by 2 loop
raise notice 'counter is %',counter;
end loop;
end; $$
结果:
> 注意: counter is 1
> 注意: counter is 3
> 注意: counter is 5
案例4:
create or replace function for_test4(n integer default 10)
returns void as $$
declare res record;
begin
for res in select title from film limit n loop
raise notice 'title is %',res.title;
end loop;
end; $$
language plpgsql;
select for_test4();
结果:
空
信息:
> 注意: title is Chamber Italian
> 注意: title is Grosse Wonderful
> 注意: title is Airport Pollock
> 注意: title is Bright Encounters
> 注意: title is Academy Dinosaur
> 注意: title is Ace Goldfinger
> 注意: title is Adaptation Holes
> 注意: title is Affair Prejudice
> 注意: title is African Egg
> 注意: title is Agent Truman