sql >> Base de Datos >  >> RDS >> PostgreSQL

Devolver múltiples valores en una función

Estás complicando demasiado las cosas. Como desea devolver múltiples valores, debe definir la función como returns table o returns setof . Prefiero returns table porque también te permite definir los nombres de las columnas del resultado.

Tampoco necesita PL/pgSQL para esto, una función SQL simple con UPDATE declaración es 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;