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;
Chiama così:
SELECT * FROM get_names('name')
Punti principali:
-
Usa
RETURNS TABLE
, quindi non devi fornire un elenco di nomi di colonne con ogni chiamata. -
Usa
RETURN QUERY
, molto più semplice. -
Qualifica i nomi delle colonne per la tabella per evitare conflitti di denominazione con
OUT
dal nome identico parametri (comprese le colonne dichiarate conRETURNS TABLE
). -
Usa una variabile denominata invece di
ALIAS
. Più semplice, fare lo stesso ed è il modo preferito. -
Una semplice funzione come questa potrebbe anche essere scritta in
LANGUAGE sql
:
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;