PL / pgSQL"格式错误的数组文字" for循环中的错误

时间:2016-07-11 16:25:15

标签: 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,以防万一。

1 个答案:

答案 0 :(得分:3)

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

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