在plpgsql中,我想从一个二维数组中一个一个的获取数组内容。
DECLARE
m varchar[];
arr varchar[][] := array[['key1','val1'],['key2','val2']];
BEGIN
for m in select arr
LOOP
raise NOTICE '%',m;
END LOOP;
END;
但是上面的代码返回:
{{key1,val1},{key2,val2}}
在一行中。我希望能够循环并调用另一个采用以下参数的函数:
another_func(key1,val1)
最佳答案
从 PostgreSQL 9.1 开始
有方便的 FOREACH
可以遍历数组的切片。 The manual :
The target variable must be an array, and it receives successive slices of the array value, where each slice is of the number of dimensions specified by
SLICE
.
DO
$do$
DECLARE
m text[];
arr text[] := '{{key1,val1},{key2,val2}}'; -- array literal
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']]; -- array constructor
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$;
关于arrays - 在 plpgsql 中循环遍历数组维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783422/