这是我的table
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;
1条答案
按热度按时间5f0d552i1#
1.正确地转义你的触发器主体。使用美元报价
1.从函数中删除float参数
1.实际在函数中执行更新
1.更新正确的表(您正在更新示例中的
nb_score
表,该表上没有触发器,因此它不会触发触发器)1.指定
mark
和nb_score
之间的关系。到目前为止,下面的触发器函数更新所有nb_score
行,而不仅仅是与mark
中插入的行相关的行。1.您的函数返回类型必须为触发器