触发更新时更新列

时间:2017-03-10 11:05:53

标签: postgresql plpgsql database-trigger

我已经写了这个函数和这个触发器:

CREATE OR REPLACE FUNCTION test4() RETURNS TRIGGER AS $BODY$
BEGIN
     UPDATE "cf"
     SET vol=(area*alt);
RETURN null;
END;
$BODY$
LANGUAGE plpgsql

触发

CREATE TRIGGER trig_upd
AFTER OR UPDATE ON "cf"
FOR EACH ROW
EXECUTE PROCEDURE test4();

我测试了我的功能,没关系。所以我创建了触发器,但我无法在“cf”表中插入任何值,因为系统崩溃了。

1 个答案:

答案 0 :(得分:3)

如果要更新每个已修改行的vol值,请不要使用update,只需指定值即可。为此,您还需要将触发器定义为之前的触发器:

CREATE OR REPLACE FUNCTION test4() RETURNS TRIGGER 
AS 
$BODY$
BEGIN
   new.vol := new.area * new.alt;
   RETURN new;
END;
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER trig_upd
BEFORE UPDATE ON "cf" --<< note the BEFORE!
FOR EACH ROW
EXECUTE PROCEDURE test4()