【问题标题】:Loop over array dimension in plpgsql在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)

【问题讨论】:

    标签: arrays postgresql multidimensional-array for-loop plpgsql


    【解决方案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 是默认值(因此您可以省略声明)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 2021-01-13
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多