FOREACH循环一个数组

最近更新时间: 2024-06-12 15:06:00

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