2016-07-11 13 views
2

Ich habe die folgende pl/pgsql Funktion. (Offensichtlich ist dies nicht die volle Funktion, es ist nur die minimale Menge an Code benötigt, um das Problem zu reproduzieren)PL/pgSQL "Malformed Array Literal" Fehler innerhalb von Schleife

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; 

Wenn ich die Funktion laufen mit SELECT test_func('{{something, things},{other, data}}'::TEXT[][]);, ich folgende Ausgabe:

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 

Ich verstehe nicht, wie dieser Fehler passiert. Wenn der Wert info gedruckt wird, zeigt es {something,things}, die mir scheint, ein richtiges Array-Literal zu sein.

Ich benutze PostgreSQL Version 9.4.7, falls es darauf ankommt.

Antwort

3

Die Variable type sollte sein text (nicht text[]):

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