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

Funções PL/pgSQL:Como retornar uma tabela normal com várias colunas usando uma instrução execute


Como você está executando essa função? Funciona como uma instrução select.

Crie uma tabela:public.users
create table public.users (id int, firstname varchar, lastname varchar);

Insira alguns registros:
insert into public.users values (1, 'aaa','bbb'),(2,'ccc','ddd');

função:minha_função
CREATE OR REPLACE FUNCTION my_function(user_id integer) RETURNS TABLE(id integer, firstname character varying, lastname character varying) AS $$
    DECLARE
        ids INTEGER[];
    BEGIN
         ids := ARRAY[1,2];
         RETURN QUERY
             SELECT users.id, users.firstname, users.lastname
             FROM public.users
             WHERE users.id = ANY(ids);
    END;
$$ LANGUAGE plpgsql;

Agora você pode usar com *
select * from my_function(1);

Resultado da consulta
 id | firstname | lastname 
----+-----------+----------
  1 | aaa       | bbb
  2 | ccc       | ddd

Ou com nomes de coluna também
select id,firstname,lastname from my_function(1);

Resultado
 id | firstname | lastname 
----+-----------+----------
  1 | aaa       | bbb
  2 | ccc       | ddd