Создание триггера в PostgreSQL - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть 2 таблицы в PostgreSQL

Таблица A: https://2.pik.vn/201819cbcc97-8d59-4d3f-9e47-38b5e33d00df.jpg

Таблица B: https://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 голосов
/ 18 декабря 2018

Следующий триггер должен выполнить работу.

Триггер 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();
...