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;
Appelez comme ceci :
SELECT * FROM get_names('name')
Points principaux :
-
Utilisez
RETURNS TABLE
, vous n'avez donc pas à fournir une liste de noms de colonnes à chaque appel. -
Utilisez
RETURN QUERY
, beaucoup plus simple. -
Noms de colonne qualifiés de table pour éviter les conflits de nom avec
OUT
de même nom paramètres (y compris les colonnes déclarées avecRETURNS TABLE
). -
Utiliser une variable nommée au lieu de
ALIAS
. Plus simple, faire la même chose, et c'est la méthode préférée. -
Une fonction simple comme celle-ci pourrait également être écrite en
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;