数组 – Postgres – 数组for循环

我正在编写一个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
DO
$do$
DECLARE
   m   varchar[];
   arr varchar[] := array[['key1','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,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是默认的(所以你可以省略声明)。

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...