我有一个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;
/
答案 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;
/
希望这有帮助。