在函数中返回多个值

时间:2015-09-17 11:42:29

标签: postgresql

我最近刚开始涉足PostgreSQL并且我一直在构建处理必要任务的功能。

有一个名为queue的表,其中添加了新任务,状态为" New"。下面的函数应该更新这些新任务并返回其queueid列值,这些值是bigint序列号。由于可能没有,一个或多个任务,我需要能够返回任何一个或多个值。

回归这些价值观让我不得不反对。我一直在谷歌搜索答案,但还没有成功。在最近的实验中,我尝试使用OUT变量并为其分配结果,但显然INTO无法将值正确地分配到数组中,而且我还没有弄清楚如何使其工作。

请帮帮我。 :)非常感谢。

CREATE OR REPLACE FUNCTION assign_task(
  IN worker text,
  OUT id bigint[])
 RETURNS bigint[] AS
$BODY$BEGIN
 EXECUTE 'UPDATE queue
  SET status = ''In progress'', worker = $1
  WHERE status = ''New''
  RETURNING queueid'
 INTO id
 using worker;
END;$BODY$
LANGUAGE plpgsql VOLATILE

1 个答案:

答案 0 :(得分:4)

你过度复杂化了。如果要返回多个值,则需要将函数定义为returns tablereturns setof。我更喜欢returns table,因为它还允许您定义结果的列名。

你也不需要PL / pgSQL,带有UPDATE语句的普通SQL函数就足够了:

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;