【发布时间】:2021-12-10 14:08:57
【问题描述】:
我需要在触发之前执行some_fun()。它将返回一个表格。
我运行了这个:
INSERT INTO SomeTable(some_bool) VALUES (true);
我预料到了:
returnColHeader
------------------
12
23
23
(3 row)
但我得到了这个:
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
我已阅读有关 TRIGGERS https://www.postgresql.org/docs/current/plpgsql-trigger.html 的文档
还有RETURNING CLAUSEhttps://www.postgresql.org/docs/9.5/dml-returning.html
和其他一些postgres 相关的读数,但我仍然无法解决我的问题。
DROP TRIGGER IF EXISTS run_some_fun on SomeTable CASCADE;
CREATE TRIGGER run_some_fun
BEFORE INSERT ON SomeTable
FOR EACH ROW WHEN (NEW.some_bool = TRUE)
EXECUTE FUNCTION run_some_fun();
CREATE OR REPLACE FUNCTION run_some_fun()
RETURNS TRIGGER AS $$
BEGIN
SELECT some_fun(NEW.eid); -- This is wrong and throws error
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION some_fun(eID INT)
RETURNS TABLE (returnColHeader INT) AS $$
BEGIN
RETURN QUERY
SELECT eid FROM Joins j1;
END;
$$ LANGUAGE plpgsql;
【问题讨论】:
标签: sql postgresql triggers plpgsql