Um anstelle des Zeilentyps einzelne Spalten zu erhalten, rufen Sie die Funktion auf mit:
SELECT * FROM testfunction();
So wie Sie alle Spalten aus einer Tabelle auswählen würden.
Berücksichtigen Sie auch diese überarbeitete Form Ihrer Testfunktion:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
Insbesondere:
Das DECLARE
Schlüsselwort wird nur einmal benötigt.
Vermeiden Sie es, Parameter zu deklarieren, die bereits (implizit) als OUT
deklariert sind Parameter in der RETURNS TABLE (...)
Klausel.
Verwenden Sie in Postgres keine CaMeL-Case-IDs ohne Anführungszeichen. Es funktioniert, Bezeichner ohne Anführungszeichen werden in Kleinbuchstaben umgewandelt, aber es kann zu verwirrenden Fehlern führen. Siehe:
- Beachten Sie bei PostgreSQL-Spaltennamen die Groß-/Kleinschreibung?
Die temporäre Tabelle im Beispiel ist völlig nutzlos (wahrscheinlich zu stark vereinfacht). Das angegebene Beispiel läuft auf Folgendes hinaus:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;