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

Retornando vários valores em uma função


Você está complicando demais as coisas. Como você deseja retornar vários valores, você precisa definir a função como returns table ou returns setof . Eu prefiro returns table porque permite definir também os nomes das colunas do resultado.

Você também não precisa de PL/pgSQL para isso, uma função SQL simples com um UPDATE afirmação é suficiente:
CREATE OR REPLACE FUNCTION assign_task(IN worker text)
  returns table (id bigint)
as
$BODY$
 UPDATE queue
  SET status = 'In progress', worker = $1
  WHERE status = 'New'
  RETURNING queueid;
$BODY$
LANGUAGE sql VOLATILE;