我已經寫了一個返回觸發器的PL/PGSQL函數,所以我可以在每行插入之前調用它。我現在意識到我也希望該函數返回新插入行的ID。我不太確定如何繼續,因爲我的函數必須返回一個觸發器。下面是一些代碼:PLPGSQL函數返回觸發器AND值
CREATE OR REPLACE FUNCTION f_insert_album() RETURNS TRIGGER AS $$
DECLARE
subj_album_id INTEGER;
BEGIN
-- ... some parts where left out
INSERT INTO t_albums_subjective (user_id, album_id, format_id, location_id, rating)
VALUES (NEW.user_id, obj_album_id, NEW.format_id, NEW.location_id, NEW.rating)
RETURNING id INTO subj_album_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Bind insert function to trigger
DROP TRIGGER IF EXISTS tr_v_albums_insert ON v_albums;
CREATE TRIGGER tr_v_albums_insert INSTEAD OF INSERT ON v_albums
FOR EACH ROW EXECUTE PROCEDURE f_insert_album();
我必須保持我的函數的返回類型f_insert_album()
到TRIGGER
,但我真的想在subj_album_id
也返回值,對應於新插入行的id
。
有沒有辦法做到這一點?它甚至有可能嗎?顯然改變返回類型不適用於Postgres。你能否建議一種替代方法?
你得所產生的標識符存儲到觸發觸發器,如果有合適的領域的元組,並使用'INSERT ...返回......也是頂級查詢。或者通過'LISTEN'和'NOTIFY'使用通知負載。 –
感謝克雷格,雖然我不太確定我的理解非常好!你能否詳細說明你的第一個想法? –