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 comOUT
de 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;