在plpgsql中循环数组维度
Posted
技术标签:
【中文标题】在plpgsql中循环数组维度【英文标题】:Loop over array dimension in plpgsql 【发布时间】:2012-04-04 17:17:40 【问题描述】:在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)
【问题讨论】:
【参考方案1】:自从 PostgreSQL 9.1 有方便的FOREACH
:
DO
$do$
DECLARE
m varchar[];
arr varchar[] := array[['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$
旧版本的解决方案:
DO
$do$
DECLARE
arr varchar[] := '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$
另外,对于 PostgreSQL 类型系统,varchar[]
和 varchar[][]
之间没有区别。我更详细地解释here。
DO
语句至少需要 PostgreSQL 9.0,LANGUAGE plpgsql
是默认值(因此您可以省略声明)。
【讨论】:
以上是关于在plpgsql中循环数组维度的主要内容,如果未能解决你的问题,请参考以下文章
plpgsql text[] varchar[] 数组不工作