【问题标题】:PL/SQL sql trigger for updating a view用于更新视图的 PL/SQL sql 触发器
【发布时间】:2015-01-10 01:29:17
【问题描述】:

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

【问题讨论】:

标签: sql oracle plsql triggers


【解决方案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;
/

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2012-04-20
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多