FOREACH循环一个数组

最近更新时间: 2025-02-18 16:02:00

  • 复制
    复制成功
postgres=# CREATE OR REPLACE PROCEDURE p_foreach()  AS
$$    
DECLARE
    v_random_arr float8[]:=ARRAY[random(),random()];
    v_random float8;
BEGIN           
    FOREACH v_random IN ARRAY v_random_arr LOOP
        RAISE NOTICE '%',v_random ;
    END LOOP;
END;
$$
LANGUAGE plpgsql;
CREATE PROCEDURE
postgres=# CALL p_foreach();
NOTICE:  0.744417542591691
NOTICE:  0.804096563253552
CALL
postgres=#
postgres=# CREATE OR REPLACE PROCEDURE p_foreach_slice()  AS
$$    
DECLARE
    v_random_arr float8[][]:=ARRAY[ARRAY[random(),random()],ARRAY[random(),random()]];
    v_random float8;
BEGIN           
    FOREACH v_random SLICE 0 IN ARRAY v_random_arr LOOP
        RAISE NOTICE '%',v_random ;
    END LOOP;
END;
$$
LANGUAGE plpgsql;
CREATE PROCEDURE
postgres=# CALL p_foreach_slice();
NOTICE:  0.0220407997258008
NOTICE:  0.898449067492038
NOTICE:  0.190678883343935
NOTICE:  0.103653562255204
CALL
postgres=#
#循环会通过计算expression得到的数组的个体元素进行迭代
postgres=# CREATE OR REPLACE PROCEDURE p_foreach_slice_1()  AS
$$    
DECLARE
    v_random_arr float8[][]:=ARRAY[ARRAY[random(),random()],ARRAY[random(),random()]];
    v_random float8[];
BEGIN           
    FOREACH v_random SLICE 1 IN ARRAY v_random_arr LOOP
        RAISE NOTICE '%',v_random ;
    END LOOP;
END;
$$
LANGUAGE plpgsql;
CREATE PROCEDURE
postgres=# CALL p_foreach_slice_1();
NOTICE:  {0.248282201588154,0.757913041394204}
NOTICE:  {0.0194511725567281,0.43799454299733}
CALL
#通过一个正SLICE值,FOREACH通过数组的切片而不是单一元素迭代