【发布时间】:2020-03-23 06:38:41
【问题描述】:
我想在我的数据库中插入之前创建一个触发器。
触发函数检查一个条件。
- 如果条件为真:
- 不能插入
- 其他:
- CAN 插入
要检查我的状况,我需要RECURSIVITY,这就是我所做的:
CREATE OR REPLACE FUNCTION trigger_check_relation()
RETURNS TRIGGER AS
$$BEGIN
WITH RECURSIVE parent_list AS (
SELECT relation.parent
FROM relation
WHERE relation.child = 9817
UNION
SELECT r.parent FROM relation r
JOIN parent_list on parent_list.parent = r.child
)
SELECT name FROM component WHERE _id in (SELECT parent FROM parent_list);
IF 9817 in (SELECT _id FROM component WHERE _id in (SELECT parent FROM parent_list))
THEN RETURN OLD;
ELSE
RETURN NEW;
END IF;
END;$$ LANGUAGE plpgsql;
我可以创建触发器和函数,但是当我运行它时:
错误:查询没有结果数据的目的地提示:如果你想 丢弃 SELECT 的结果,改用 PERFORM。语境: PL/pgSQL 函数 trigger_check_relation() 第 3 行 SQL 语句 SQL 状态:42601
您能帮我理解并解决这个问题吗?
【问题讨论】:
标签: postgresql if-statement plpgsql database-trigger recursive-query