PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retornar uma consulta de uma função?

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:

  • Use RETURNS TABLE , para que você não precise fornecer uma lista de nomes de colunas com cada chamada.

  • Use RETURN QUERY , muito mais simples.

  • Nomes de coluna qualificados de tabela para evitar conflitos de nomenclatura com OUT de nome idêntico parâmetros (incluindo colunas declaradas com RETURNS TABLE ).

  • Use uma variável nomeada em vez de ALIAS . Mais simples, fazendo o mesmo, e é a forma preferida.

  • Uma função simples como esta também pode ser escrita em 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;