更新 PLpgsql 中的触发器

问题描述 投票:0回答:1

我对 sql 完全陌生。请问有人可以帮我创建 PostgreSQL 数据库的触发器吗? 所以我有 1 个名为“tables”的表,其中有 2 个名为“w”(获胜的游戏,整数)和“gp”(玩的游戏,整数)的列。因此,该图是根据修改“w”值自动更新“gp”值的触发器。

表格如下所示:

俱乐部 | 全科医生| w |

尤文图斯| 2 | 2 |

拉齐奥 | 2 | 2 |

我需要创建一个更新触发器,它将在将 1 场获胜游戏添加到“w”列(如 w+1)后更新“gp”列,如 gp+1。会是什么?

我尝试过这样的事情:

CREATE OR REPLACE FUNCTION fn_gp_increment()
RETURNS TRIGGER AS $$
BEGIN
    IF NEW.w = OLD.w+1 THEN
        UPDATE tables SET NEW.gp = OLD.gp+1;
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER gp_increment
BEFORE UPDATE OF w ON tables
FOR EACH ROW
EXECUTE FUNCTION n_gp_increment();

不幸的是,它不起作用。我认为我走错了路,在我看来,我不了解有关触发器的一些基础知识。将不胜感激对此的任何帮助。感谢您的关注。

sql database postgresql triggers
1个回答
0
投票

要在 PostgreSQL 中创建一个触发器,每当 w(赢得的比赛)列增加时自动更新 gp(已玩的比赛)列,您可以按照以下步骤操作:

创建一个函数:触发器将调用此函数来更新 gp 列。

创建触发器:只要 w 列更新,此触发器就会触发该函数。

具体操作方法如下:

第 1 步:创建函数 sql 复制代码 创建或替换函数 update_gp() 回报触发为$$ 开始 -- 检查 w(赢得的比赛)列是否递增 IF NEW.w > OLD.w THEN -- 将 gp(玩过的游戏)列增加相同的数量 新.gp := 旧.gp + (新.w - 旧.w); 结束如果; 返回新的; 结尾; $$ 语言 plpgsql; 第 2 步:创建触发器 sql 复制代码 创建触发器 update_gp_trigger 更新 w ON 表之前 对于每一行 何时(旧.w 与新.w 不同) 执行函数 update_gp(); 解释: 函数 update_gp():该函数检查 w 列是否增加。如果有,它会相应地更新 gp 列。 触发器 update_gp_trigger:此触发器在对 w 列进行任何更新之前调用该函数。 WHEN 子句确保触发器仅在 w 的值实际发生更改时触发。 用法示例 假设您更新了尤文图斯的 w 值:

sql 复制代码 更新表 设置 w = w + 1 WHERE 俱乐部 = '尤文图斯'; 运行此命令后,尤文图斯的 gp 列也会自动增加 1。

© www.soinside.com 2019 - 2024. All rights reserved.