在PostgreSQL中触发时,在“创建”处或附近的语法错误

时间:2020-11-08 22:20:44

标签: sql postgresql triggers

我正在尝试创建一个触发器,以检查是否在表中输入某一行时该行中的某个值是否存在于另一个表中。 我的桌子是:

汽车,租金,要求

我正在使用的代码:

CREATE OR REPLACE FUNCTION trigf1() RETURNS trigger AS $$
BEGIN
SELECT seats FROM car WHERE lno=new.lno;

IF seats=!(SELECT seats FROM request WHERE rno=new.rno)
THEN
raise exception 'assignment contradicts design'
END IF;
RETURN null;
END;
$$

CREATE TRIGGER 'T1' BEFORE INSERT ON rent
for each row
EXECUTE PROCEDURE trigf1( );

我收到一条错误消息:

错误:“创建”或附近的语法错误

第13行:在插入租金之前创建触发器“ T1”

有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

好吧,不知道为什么,但这解决了它:

CREATE OR REPLACE FUNCTION trigf1() RETURNS trigger AS $$
BEGIN
SELECT seats FROM car WHERE lno=new.lno;

IF seats=!(SELECT seats FROM request WHERE rno=new.rno)
THEN
raise exception 'assignment contradicts design';
END IF;
RETURN null;
END;
$$language plpgsql;

CREATE TRIGGER T1 BEFORE INSERT ON rent
for each row
EXECUTE PROCEDURE trigf1( );

如果有人知道原因,我可以使用一个解释:)