代码之家  ›  专栏  ›  技术社区  ›  Saijo-Shi

PLpgsql中的更新触发器

  •  0
  • Saijo-Shi  · 技术社区  · 1 年前

    我是sql的新手。请问,有人能帮我创建一个PostgreSQL数据库的触发器吗。 所以我有一个名为“tables”的表,其中有两列,分别是“w”(赢得的游戏,整数)和“gp”(玩过的游戏,整型)。因此,该图是根据修改“w”值自动更新“gp”值的触发器。

    表格看起来像这样:

    俱乐部|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();
    

    不幸的是,它不起作用。我想我走错了路,在我看来,我不了解触发器的一些基本知识。我们将非常感谢您对此的任何帮助。感谢您的关注。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Krishna Kulkarni    1 年前

    步骤1:创建函数

    创建或替换函数update_gp() 返回触发器$$ 开始 --检查w(赢得的游戏数)列是否正在递增 如果是新的。w>老。然后 --将gp(游戏数)列增加相同的数量 NEW.gp:=OLD.gp+(NEW.w-OLD.w); 如果结束; 返回新; 结束; $$语言plpgsql;

    步骤2:创建触发器

    创建触发器更新_gp_ftrigger 在更新w-ON表之前 每行 WHEN(旧.w与新.w不同) 执行函数update_gp();

    说明: 函数update_gp():此函数检查w列是否增加。如果有,它会相应地更新gp列。 触发器update_gp_ftrigger:此触发器在对w列进行任何更新之前调用函数。WHEN子句确保触发器仅在w的值实际发生变化时触发。

    更新表格 设置w=w+1 WHERE俱乐部=“尤文图斯”;