在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[] 数组不工作

C# 循环遍历未知维度的数组

在循环中附加具有不同维度的numpy ndarray

在 PLPGSQL FOR 循环中检测空集

SystemVerilog foreach 语法,用于循环遍历多维数组的低维

for循环中的Django模板多维数组访问