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;
Ligue assim:
SELECT * FROM get_names('name')
Pontos principais:
-
UseRETURNS TABLE, para que você não precise fornecer uma lista de nomes de colunas com cada chamada.
-
UseRETURN QUERY, muito mais simples.
-
Nomes de coluna qualificados de tabela para evitar conflitos de nomenclatura comOUTde nome idêntico parâmetros (incluindo colunas declaradas comRETURNS TABLE).
-
Use uma variável nomeada em vez deALIAS. Mais simples, fazendo o mesmo, e é a forma preferida.
-
Uma função simples como esta também pode ser escrita emLANGUAGE 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;