Ich habe SELECT dynamisch erzeugt. Ich versuche, das Ergebnis als SETOF RECORD zurückzugeben. Sth wie folgt aus:Postgres 9.1 Art des SETOF Datensatzes
CREATE FUNCTION test(column_name text) RETURNS SETOF RECORD AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN EXECUTE 'SELECT ' || quote_ident(column_name) || ' FROM dates'
LOOP
RETURN NEXT row;
END LOOP;
RETURN;
END;
$$ LANGUAGE 'plpgsql';
Wenn ich versuche:
SELECT * FROM test('column1');
ich dieses:
ERROR: a column definition list is required for functions returning "record"
Ich weiß, dass column1 Integer-Typ ist:
SELECT * FROM test('column1') f(a int);
Ergebnis ist richtig, weil ich weiß, dass das Integer typ sein wird e.
Wenn ich versuche:
SELECT * FROM test('column1') f(a varchar);
ich Fehler:
ERROR: wrong record type supplied in RETURN NEXT
DETAIL: Returned type integer does not match expected type character varying in column 1.
Nun meine Frage: Was der Teil querty zu tun, um loszuwerden, wo ich Typen ‚f (a int definieren) ". Es sollte möglich sein, weil Postgres bekannt ist, was zurückgegeben wird. Ich habe versucht mit unwiderlegbaren Optionen, aber ohne Erfolg.
Wie kann 'column1' ein' int' in der ersten sein Beispiel und ein 'varchar' im zweiten Beispiel sein? –
Es ist nicht, aber ich wollte zeigen, dass Postgres weiß, was Rückgabetyp ist. – zie1ony
Es scheint mir, was Sie tun, ist genau das gleiche wie 'Spalte1 aus Daten auswählen. Warum benötigen Sie eine Funktion, um nur eine Spalte aus einer Tabelle zurückzugeben? Was ist das Problem, das Sie versuchen zu lösen? –