arrays - 在 plpgsql 中循环遍历数组维度

标签 arrays postgresql multidimensional-array for-loop plpgsql

在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 plpgsqlDO 语句的默认设置,因此我们可以省略声明。

对于 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/

相关文章:

python - Numpy 的 "shape"函数返回二维数组的一维值

python - 如何将数组列表拆分为单独的数组?

ruby-on-rails - 如何修复 PG::ProgramLimitExceeded: ERROR?

sql - 在postgres中使用GROUP BY子句时如何聚合json字段?

mysql - 从mysql中的值中选择

ruby-on-rails - 如何以智能方式从多维数组中获取 "extract"值?

c++ - 在 C++ 中返回二维数组

javascript - 将 if 语句与具有多个值的嵌套数组的 JavaScript 对象合并

java - 如何转换文本文件以便放置在我的 acharengine 数组中?

ruby - 为什么 array.index 比 array.include 快?