所以,我試圖創建一個程序,它將在我的表中找到 特定的行,將結果中的行保存爲 返回,然後刪除行並返回結果。PostgreSQL存儲過程中的相同查詢
我能夠做到的最好的事情是以下幾點:
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
,以便我可以在之後刪除該行?
'DELETE'不支持'LIMIT' –
第二個解決方案似乎非常不2' SELECT's'在這個意義上,您首先選擇ID然後你搜索刪除與此ID的表。我只想「選擇」並立即刪除。 – insumity
但是,除非我誤解了你的例子,你並沒有試圖刪除所有的匹配,只有一個(隨機) –