我最近刚开始涉足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
答案 0 :(得分:4)
你过度复杂化了。如果要返回多个值,则需要将函数定义为returns table
或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;