自PostgreSQL 9.1以来
有方便的FOREACH
可以循环遍历数组的切片。手册:
目标变量必须是一个数组,并且接收数组值的连续切片,其中每个切片的维数由SLICE
指定。
DO
$do$
DECLARE
m text[];
arr text[] := '{{key1,val1},{key2,val2}}';
BEGIN
FOREACH m SLICE 1 IN ARRAY arr
LOOP
RAISE NOTICE 'another_func(%,%)', m[1], m[2];
END LOOP;
END
$do$;
db<>fiddle here - 使用打印结果的函数替代DO
LANGUAGE plpgsql
是DO
语句的默认值,因此我们可以省略声明。
对于Postgres类型系统,text[]
和text[][]
之间没有区别。请参见:
Postgres 9.0或更早版本
DO
$do$
DECLARE
arr text[] := array[['key1','val1'],['key2','val2']];
BEGIN
FOR i IN array_lower(arr, 1) .. array_upper(arr, 1)
LOOP
RAISE NOTICE 'another_func(%,%)', arr[i][1], arr[i][2];
END LOOP;
END
$do$;