我有以下 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/