用于更新视图的PL / SQL sql触发器

时间:2015-01-09 15:43:46

标签: sql oracle plsql triggers

我有一个player_value视图,其中包含玩家表中的玩家ID,玩家姓名和玩家第二名。 如果我从视图中修改信息,我必须创建一个更新播放器表的触发器。

当我想创建触发器时,我会收到一些警告。你能救我吗?

DROP VIEW player_value;

CREATE OR REPLACE VIEW player_value AS
SELECT p.ID,p.name,p.sname,p.value
FROM player p;




DROP TRIGGER up_value;
CREATE OR REPLACE TRIGGER up_value
INSTEAD OF UPDATE
ON player_value
BEGIN 

        update player
        set value=:new.value
        where ID=:new.ID;
    end if;
end;
/

1 个答案:

答案 0 :(得分:1)

您有一个额外的END IF声明。此外,您还缺少FOR EACH ROW。我的猜测是那里曾经有一个IF UPDATE语句,例如:

CREATE OR REPLACE TRIGGER up_value
INSTEAD OF UPDATE ON player_value FOR EACH ROW
BEGIN 
    IF (UPDATING AND :new.value <> :old.value) THEN
        UPDATE player
           SET value = :new.value
         WHERE ID = :new.ID;
    END IF;
END;
/

但这可以更容易地完成如下:

CREATE OR REPLACE TRIGGER up_value
INSTEAD OF UPDATE OF value ON player_value FOR EACH ROW
BEGIN
    UPDATE player
       SET value = :new.value
     WHERE ID = :new.ID;
END;
/

希望这有帮助。