arrays - for 循环中的 PL/pgSQL "Malformed array literal"错误

标签 arrays postgresql plpgsql

我有以下 pl/pgsql 函数。 (显然,这不是完整的功能,它只是重现问题所需的最少代码量)

CREATE OR REPLACE FUNCTION test_func(infos TEXT[][])
RETURNS void AS
$$
DECLARE
    info TEXT[];
    type TEXT[];
    name TEXT;
BEGIN
    FOREACH info SLICE 1 IN ARRAY infos LOOP
        RAISE NOTICE 'Stuff: %', info;
        type := info[1];
        name := info[2];
        RAISE NOTICE 'Done with stuff';
    END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;

当我使用 SELECT test_func('{{something, things},{other, data}}'::TEXT[][]); 运行函数时,我得到以下输出:

NOTICE:  Stuff: {something,things}
ERROR:  malformed array literal: "something"
DETAIL:  Array value must start with "{" or dimension information.
CONTEXT:  PL/pgSQL function test_func(text[]) line 10 at assignment

我不明白这个错误是怎么发生的。当 info 的值被打印时,它显示 {something,things},在我看来这是一个合适的数组文字。

我正在使用 PostgreSQL 9.4.7 版,以防万一。

最佳答案

变量type应该是text(不是text[]):

CREATE OR REPLACE FUNCTION test_func(infos TEXT[][])
RETURNS void AS
$$
DECLARE
    info TEXT[];
    type TEXT;
    name TEXT;
...

关于arrays - for 循环中的 PL/pgSQL "Malformed array literal"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311784/

相关文章:

sql - 在触发器函数中访问行类型的动态列名

postgresql - 在数组中传递表名

c++ - 对包含 k 个已排序部分的 n 个元素的数组进行排序

java - 在 JAVA 中应该使用哪种数组类型,为什么?

sql - PostgreSQL 动态获取转发计数值

sql - postgresql 函数中的 IF ELSE

PHP - 从字符串创建数组

从函数更改 char 数组

php - 如何在创建 session 时获取两个字段?

sql - 使用多个复合输出参数调用 PostgreSQL 函数