在函数中返回多个值

Kee*_*rB5 1 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
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 5

你把事情复杂化了。由于您想返回多个值,您需要将函数定义为returns tableor returns 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;
Run Code Online (Sandbox Code Playgroud)