PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rückgabe mehrerer Werte in einer Funktion

Du verkomplizierst die Dinge zu sehr. Da Sie mehrere Werte zurückgeben möchten, müssen Sie die Funktion als returns table definieren oder returns setof zurück . Ich bevorzuge returns table weil Sie damit auch die Spaltennamen des Ergebnisses definieren können.

Sie brauchen dafür auch kein PL/pgSQL, eine einfache SQL-Funktion mit einem UPDATE Aussage genügt:

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;