我想在每次向 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
触发器返回 NEW
或 NULL
,但如果两者都不使用,它将失败。
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;
关于sql - 在 DELETE 和更新选定语句后创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55709881/