我接下来有3张桌子:
播放器(pid,name,value),
团队(tid,tname,totalvalue),
合同(PID,TID,薪水)
我想创建一个触发器,在每次插入team.totalvalue列值后更新。所以,我想用触发器团队计算值来计算,但是我没有让它工作。谁能帮我? :)
CREATE OR REPLACE TRIGGER totalValue
AFTER UPDATE player
ON team, player,contract
FOR EACH ROW
BEGIN
SET team.totalvalue=team.totalvalue+player.value
WHERE contract.pid=player.pid AND contract.tid=team.tid
END;
/
答案 0 :(得分:1)
以下是我认为适用于UPDATE
条件的触发器示例:
CREATE OR REPLACE TRIGGER total_value
AFTER UPDATE OF value ON player
FOR EACH ROW
BEGIN
UPDATE team t
SET t.totalvalue = t.totalvalue - :old.value + :new.value
WHERE EXISTS ( SELECT 1 FROM contract c
WHERE t.tid = c.tid
AND c.pid = :new.pid );
END;
/
(我担心在:
和old
之前是否需要冒号new
,我不确定是否在我的头顶。
在上面的触发器中,我们会减去播放器的旧value
并添加新的播放器。如果是DELETE
,我们只需减去旧value
;对于INSERT
我们会添加新的。如果需要,它可能都可以在一个触发器中完成。