将数组数组取消嵌套到 plpgsql 中的简单数组

Posted

技术标签:

【中文标题】将数组数组取消嵌套到 plpgsql 中的简单数组【英文标题】:Unnesting an array of arrays, to a simple array in plpgsql 【发布时间】:2020-09-29 19:42:54 【问题描述】:

这不起作用:

DO
$do$
    DECLARE
        nested   varchar[][] := 'a,b,c';
        unnested varchar[];
    BEGIN    
        unnested := unnest(nested)::text[];
    END
$do$;

因为似乎 unnest 表达式返回了一个表。错误信息是:

[22P02] 错误:格式错误的数组文字:“a”详细信息:数组值必须 以“”或维度信息开头。其中:SQL 语句“SELECT unnest(nested)::text[]" PL/pgSQL 函数 inline_code_block 第 7 行 作业

所以我想解决方案是用未嵌套的返回值创建一个数组?我该怎么做?

【问题讨论】:

【参考方案1】:

您不能将集合返回函数的结果转换为数组。

DO
$do$
DECLARE
  nested   varchar[][] := 'a,b,c';
  unnested varchar[];
BEGIN    
  unnested := array(select * from unnest(nested));
END
$do$;

【讨论】:

以上是关于将数组数组取消嵌套到 plpgsql 中的简单数组的主要内容,如果未能解决你的问题,请参考以下文章

SQL(雅典娜)中的取消嵌套:如何将结构数组转换为从结构中提取的值数组?

将数组取消嵌套到表 Postgres

PLPGSQL 数组赋值不起作用,“赋值中的数组下标不能为空”

BigQuery 取消嵌套数组 - 获取重复项

如何取消设置嵌套 foreach 中的特定数组?

如何取消设置嵌套 foreach 中的每个数组?