循环语句 FOREACH vrandom SLICE 0 IN ARRAY vrandomarr LOOP teledb$ RAISE NOTICE '%',vrandom ; teledb$ END LOOP; teledb$ END; teledb$ $$ teledb LANGUAGE plpgsql; CREATE FUNCTION teledb SELECT f27(); NOTICE: 0.0588191924616694 NOTICE: 0.368828620761633 NOTICE: 0.813376842066646 NOTICE: 0.415377039927989 f27 (1 row) 循环会通过计算expression得到的数组的个体元素进行迭代。 plaintext teledb CREATE OR REPLACE FUNCTION f27() RETURNS VOID AS teledb $$ teledb$ DECLARE teledb$ vrandomarr float8[][]:ARRAY[ARRAY[random(),random()],ARRAY[random(),random()]]; teledb$ vrandom float8[]; teledb$ BEGIN teledb$ FOREACH vrandom SLICE 1 IN ARRAY vrandomarr LOOP teledb$ RAISE NOTICE '%',vrandom ; teledb$ END LOOP; teledb$ END; teledb$ $$ teledb LANGUAGE plpgsql; CREATE FUNCTION teledb SELECT f27(); NOTICE: {0.578366641886532,0.78098024148494} NOTICE: {0.783956411294639,0.450278480071574} f27 (1 row) 通过一个正SLICE值,FOREACH通过数组的切片而不是单一元素迭代。