PostgreSQL for in loop

模板是

FOR var IN REVERSE 1..10 LOOP
    statement_list
END LOOP;

REVERSE 不知道什么意思……

一般用的是

FOR var IN 1..10 LOOP statement_list END LOOP;

如果是navicate for+tab出来的模板,需要自己手动定义值,不然是不生效的。

var是一个变量,它刚开始的时候是等于1..10中的1,可以对var进行数学计算,但是不管var在中途改变为什么值,这个循环还是从1开始循环到10执行10次的。statement_list中是自己的逻辑操作,每一个sql用一个;隔开。

中途可以打印var的值,用

raise notice 'var的值:%', var;

完整的一个示例:

-- 如果存在该存储过程就删除
drop function if exists function_test3();
-- replace之前先调用了drop是因为如果返回值不同是不能直接替换的
create or replace function function_test3() returns void as
-- 标记开始和起始位置,用$$和$$也可以,主要是查询存储过程的结果是用的$BODY$
$BODY$
--     这里可以先定义一些变量
    BEGIN
        FOR var_a IN  1..10 LOOP
    raise notice '变量var_a的值是:%', var_a;
END LOOP;
    END
$BODY$
LANGUAGE plpgsql; 

-- 调用存储过程
select function_test3();
select function_test3()
> 注意:  变量var_a的值是:1
> 注意:  变量var_a的值是:2
> 注意:  变量var_a的值是:3
> 注意:  变量var_a的值是:4
> 注意:  变量var_a的值是:5
> 注意:  变量var_a的值是:6
> 注意:  变量var_a的值是:7
> 注意:  变量var_a的值是:8
> 注意:  变量var_a的值是:9
> 注意:  变量var_a的值是:10
> OK
> 时间: 0.001s
原文地址:https://www.cnblogs.com/woyujiezhen/p/13780871.html