在 PostgreSQL 中创建触发器
Creating trigger in PostgreSQL
我在 PostgreSQL 中有 2 个 table
Table A
: https://2.pik.vn/201819cbcc97-8d59-4d3f-9e47-38b5e33d00df.jpg
Table B
: https://2.pik.vn/20186c925ba2-7c9c-4253-ba28-497df1465b4f.jpg
我想在 PostgeSQL 中创建一个触发器,因此如果我在 table A
中更新列 area
中的值,area_LUA
中的值将自动更改 table B
.
area_LUA = total sum (area)*100
条件为 A.parent_id = B.parent_id and CODE ='LUA'
有人可以指导我如何创建这样的触发器吗?非常感谢
以下触发器应该可以完成工作。
触发器 area_lua
将在 table A
的每次更新后执行。触发函数 update_area_lua
检查 area
的值是否改变,并根据给定的 parent_id
相应地更新 table B
中的列 area_LUA
.
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();
我在 PostgreSQL 中有 2 个 table
Table A
: https://2.pik.vn/201819cbcc97-8d59-4d3f-9e47-38b5e33d00df.jpg
Table B
: https://2.pik.vn/20186c925ba2-7c9c-4253-ba28-497df1465b4f.jpg
我想在 PostgeSQL 中创建一个触发器,因此如果我在 table A
中更新列 area
中的值,area_LUA
中的值将自动更改 table B
.
area_LUA = total sum (area)*100
条件为 A.parent_id = B.parent_id and CODE ='LUA'
有人可以指导我如何创建这样的触发器吗?非常感谢
以下触发器应该可以完成工作。
触发器 area_lua
将在 table A
的每次更新后执行。触发函数 update_area_lua
检查 area
的值是否改变,并根据给定的 parent_id
相应地更新 table B
中的列 area_LUA
.
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();