因此,我正在尝试创建一个过程,该过程将在我的表中查找特定行,将该行保存在要返回的结果中,删除该行,然后返回结果。
我设法做的最好的事情是:
CREATE OR REPLACE FUNCTION sth(foo integer)
RETURNS TABLE(a integer, b integer, ... other fields) AS $$
DECLARE
to_delete_id integer;
BEGIN
SELECT id INTO to_delete_id FROM my_table WHERE sth_id = foo LIMIT 1;
RETURN QUERY SELECT * FROM my_table WHERE sth_id = foo LIMIT 1;
DELETE FROM my_table where id = to_delete_id;
END;
$$ LANGUAGE plpgsql;
如您所见,我有 2 个SELECT
操作几乎做同样的事情(额外开销)。有没有办法只拥有第二个SELECT
并设置,to_delete_id
以便之后我可以删除该行?