【发布时间】:2014-11-18 21:42:13
【问题描述】:
我想将更新的返回值存储到数据结构中,以便在后续查询中使用它。
在这个例子中,我得到了一个“parent_ids”列表,我想找到其父母在该数组中的所有孩子。然后,我希望更新它们的一些价值,并做其他事情。
CREATE OR REPLACE FUNCTION plpgsql_is_really_great(parent_ids bigint[])
RETURNS void AS
$$
DECLARE
found_ids bigint[];
BEGIN
UPDATE child SET
foo = bar
FROM
(SELECT id
FROM child
WHERE parent_id=ANY(parent_ids)
) as children_ids
WHERE
child.id = children_ids.id
RETURNING children_ids.id INTO found_ids; -- ???
-- do more stuff with found_ids
$$ LANGUAGE plpgsql
【问题讨论】:
-
这真的取决于你想用收集的 ID 做什么。通常,具有数据修改 CTE 的单个查询是最佳解决方案。
标签: function postgresql plpgsql sql-returning