PL / SQL触发器总值

时间:2015-01-02 17:54:50

标签: sql oracle plsql triggers

我接下来有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;
            /

1 个答案:

答案 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我们会添加新的。如果需要,它可能都可以在一个触发器中完成。