gpt4 book ai didi

sql - 在 DELETE 和更新选定语句后创建触发器

转载 作者:行者123 更新时间:2023-11-29 12:50:18 25 4
gpt4 key购买 nike

我想在每次向 ArrayA 添加新行时创建一个触发器。

这是我使用的代码:

CREATE TRIGGER increasement
AFTER INSERT
ON ArrayA
FOR EACH ROW
EXECUTE PROCEDURE func_increasement();

添加了一行,我需要更新 ArrayB 中的字段,但问题是:我需要知道已添加的新行的 ID,以便知道要在 ArrayB 中增加哪一行。

这是我试过的:

CREATE OR REPLACE FUNCTION func_increasement()
RETURNS trigger AS
$$
BEGIN
IF (TG_OP = 'INSERT') THEN
UPDATE ArrayB SET number = number + 1
WHERE ArrayB.id = ( SELECT ArrayA.arraya_id FROM ArrayA WHERE (SELECT COUNT(*) FROM ArrayA));
END;
$$ LANGUAGE plpgsql;

这是我用来获取行总数的查询。

    Select Count(*) from ArrayA; 

最佳答案

我假设您不需要条件,因为您只希望在 INSERT 事件之后运行触发器。此外,表 ArrayB 中的初始值应该是默认设置为 0 或在更新期间需要 COALESCE。此外,触发器应该有一个 RETURN 语句。您可以为 AFTER 触发器返回 NEWNULL,但如果两者都不使用,它将失败。

CREATE OR REPLACE FUNCTION func_increasement()
RETURNS trigger AS
$$
BEGIN
UPDATE ArrayB SET number = coalesce(number,0) + 1
WHERE ArrayB.id = NEW.arraya_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

DEMO

关于sql - 在 DELETE 和更新选定语句后创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55709881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com