CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
RETURN QUERY
SELECT t.col_a, t.col_b -- must match RETURNS TABLE
FROM mytable t
WHERE t.name = _tname;
END
$func$ LANGUAGE plpgsql;
Rufen Sie so auf:
SELECT * FROM get_names('name')
Hauptpunkte:
-
Verwenden Sie
RETURNS TABLE
, sodass Sie nicht bei jedem Aufruf eine Liste mit Spaltennamen angeben müssen. -
Verwenden Sie
RETURN QUERY
, viel einfacher. -
Tabellenqualifizieren Sie Spaltennamen, um Namenskonflikte mit identisch benannten
OUT
zu vermeiden Parameter (einschließlich Spalten, die mitRETURNS TABLE
deklariert wurden ). -
Verwenden Sie eine benannte Variable anstelle von
ALIAS
. Einfacher, dasselbe tun, und es ist der bevorzugte Weg. -
Eine einfache Funktion wie diese könnte auch in
LANGUAGE sql
geschrieben werden :
CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b --, more columns - must match RETURNS above
FROM mytable t
WHERE t.name = $1;
$func$ LANGUAGE sql;