在PostgreSQL中创建触发器

时间:2018-12-18 04:23:46

标签: sql postgresql sum database-trigger

我在PostgreSQL中有2个表

Ahttps://2.pik.vn/201819cbcc97-8d59-4d3f-9e47-38b5e33d00df.jpg

Bhttps://2.pik.vn/20186c925ba2-7c9c-4253-ba28-497df1465b4f.jpg

我想在PostgeSQL中创建一个触发器,因此,如果我更新表area的列A中的值,则area_LUA中的值将在表B中自动更改。

area_LUA = total sum (area)*100,条件为A.parent_id = B.parent_id and CODE ='LUA'

有人可以指导我如何创建这样的触发器吗?非常感谢

1 个答案:

答案 0 :(得分:0)

以下触发器应完成工作。

在对表area_lua进行每次更新后,将触发A。触发函数update_area_lua检查area的值是否已更改,并相对于给定的area_LUA更新表B中的列parent_id

CREATE OR REPLACE FUNCTION update_area_lua()
    RETURNS trigger AS
$BODY$
BEGIN
    IF NEW.area <> OLD.area THEN
        UPDATE B
        SET area_LUA = (
            SELECT SUM(area) * 100 
            FROM A 
            WHERE parent_id = B.parent_id AND CODE ='LUA'
        )
        WHERE parent_id = NEW.parent_id;
    END IF;
    RETURN NEW;
END;
$BODY$


CREATE TRIGGER area_lua
    AFTER UPDATE
    ON A
    FOR EACH ROW
    EXECUTE PROCEDURE update_area_lua();