PosgreSQL trigger function update after insert
我是 PosgreSQL 触发器的新手。根据文档,我试图制作触发功能,但它不起作用,也不知道为什么。
有一个抓取插入到我的房地产数据库记录中。我想根据选定的条件更新新插入的记录。
这是我的触发功能代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE OR REPLACE FUNCTION czynsz_clear() RETURNS TRIGGER AS $body$ BEGIN IF administrative_fees IS NOT NULL AND administrative_fees_m2 IS NULL AND area IS NOT NULL AND type_id IN (6,1) AND administrative_fees > 1 AND area > 1 THEN UPDATE realestates_realestate SET administrative_fees_m2 = TRUNC((administrative_fees/ AREA):: INTEGER,2) RETURN NEW; END IF; END; $body$ LANGUAGE plpgsql; |
所以逻辑是:
将新记录插入数据库 realestates_realestate 后,我想检查所选字段是否为空或其他条件,然后进行更新。
创建函数后,我想在插入表后触发触发器启动此函数。
我做错了什么?我正在使用 HeidiSQL (10.3.0.5771) 并出现消息:
ERROR: syntax error at near RETURN. Line 11: RETURN NEW;
删除这个RETURN NEW后,出现错误END IF;和相同的消息。
如果要更改刚刚插入的行,请不要使用
要访问列值,也可以使用
类似这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE OR REPLACE FUNCTION czynsz_clear() RETURNS TRIGGER AS $body$ BEGIN IF NEW.administrative_fees IS NOT NULL AND NEW.administrative_fees_m2 IS NULL AND NEW.area IS NOT NULL AND NEW.type_id IN (6,1) AND NEW.administrative_fees > 1 AND NEW.area > 1 THEN NEW.administrative_fees_m2 := TRUNC((administrative_fees/ AREA)::INTEGER,2); END IF; RETURN NEW; -- this needs to be outside of the IF END; $body$ LANGUAGE plpgsql; |
这假定触发器被定义为行级触发器,例如
您还需要将其设为 BEFORE 触发器
1 2 3 | CREATE TRIGGER .. BEFORE INSERT OR UPDATE ON .... FOR EACH ROW EXECUTE PROCEDURE czynsz_clear(); |
你得到的错误是由于你的 UPDATE 语句没有以
最后,触发器只有在