模板是
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