Следующий триггер должен выполнить работу.
Триггер 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();