循环语句 CALL pforby(); NOTICE: i 1 NOTICE: i 3 NOTICE: i 5 NOTICE: i 7 CALL teledb 使用BY 设置步长。 FOR 循环查询结果 plaintext teledb CREATE OR REPLACE PROCEDURE pforrecord() AS $$ DECLARE vrec RECORD; BEGIN FOR vrec IN SELECT relname,relkind FROM pgclass limit 2 LOOP RAISE NOTICE '%',vrec; END LOOP; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb CALL pforrecord(); NOTICE: (pgstatstatements,v) NOTICE: (pgproc,v) CALL teledb FOREACH 循环一个数组 plaintext teledb CREATE OR REPLACE PROCEDURE pforeach() AS $$ DECLARE vrandomarr float8[]:ARRAY[random(),random()]; vrandom float8; BEGIN FOREACH vrandom IN ARRAY vrandomarr LOOP RAISE NOTICE '%',vrandom ; END LOOP; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb CALL pforeach(); NOTICE: 0.744417542591691 NOTICE: 0.804096563253552 CALL teledb teledb CREATE OR REPLACE PROCEDURE pforeachslice() AS $$ DECLARE vrandomarr float8[][]:ARRAY[ARRAY[random(),random()],ARRAY[random(),random()]]; vrandom float8; BEGIN FOREACH vrandom SLICE 0 IN ARRAY vrandomarr LOOP RAISE NOTICE '%',vrandom ; END LOOP; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb CALL pforeachslice(); NOTICE: 0.0220407997258008 NOTICE: 0.898449067492038 NOTICE: 0.190678883343935 NOTICE: 0.103653562255204 CALL teledb 循环会通过计算expression 得到的数组的个体元素进行迭代。 plaintext teledb CREATE OR REPLACE PROCEDURE pforeachslice1() AS $$ DECLARE vrandomarr float8[][]:ARRAY[ARRAY[random(),random()],ARRAY[random(),random()]]; vrandom float8[]; BEGIN FOREACH vrandom SLICE 1 IN ARRAY vrandomarr LOOP RAISE NOTICE '%',vrandom ; END LOOP; END; $$ LANGUAGE plpgsql; CREATE PROCEDURE teledb