【发布时间】:2023-01-28 22:22:47
【问题描述】:
这是我的桌子:
CREATE TABLE mark (
EID serial,
PID integer,
SID integer,
score integer DEFAULT 5 NOT NULL,
CONSTRAINT PK_EID PRIMARY KEY(EID),
CONSTRAINT "FK_personne_ID"
FOREIGN KEY (PID)
REFERENCES personne (PID)
ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT "FK_serie_ID"
FOREIGN KEY (SID)
REFERENCES serie (SID)
ON UPDATE RESTRICT ON DELETE RESTRICT
);
我的触发器:当在“分数”列中插入新行/值时,更新平均分数和总分数: 我不确定我是应该提前实现一个功能还是直接从触发器开始:
CREATE OR REPLACE FUNCTION FunctionUpdateScore(float) RETURNS integer AS
'BEGIN
SELECT COUNT(score) AS nb_score, AVG(score) AS ag_score
FROM mark;
END;'
LANGUAGE 'plpgsql';
--trigger
CREATE or REPLACE TRIGGER TriggerUpdateScore
AFTER INSERT
ON mark
FOR EACH ROW
EXECUTE PROCEDURE FunctionUpdateScore();
UPDATE nb_score
SET nb_score= nb_score+ 1
END;
【问题讨论】:
-
你需要做的是先阅读Create trigger和plpgsql trigger function。
-
谢谢 Adrian,阅读了很多博客和帖子,但我的触发器仍然不起作用:
-
CREATE OR REPLACE TRIGGER TriggerUpdateScore AFTER INSERT ON evaluation FOR EACH ROW BEGIN UPDATE serie s SET noteMoyenne = (NoteMoyenne*nbNotes + :new.note) / (nbNotes + 1), nbNotes = nbNotes + 1 WHERE :new.sid = s.sid 复制代码;结尾;
-
阅读链接,您就会知道自己做错了什么。
标签: sql postgresql triggers plpgsql