PL/SQL sql 更新视图的触发器
PL/SQL sql trigger for updating a view
我有 player_value 视图,其中包含来自玩家 table 的玩家 ID、玩家姓名和玩家姓氏。
如果我修改视图中的信息,我必须创建一个触发器来更新播放器 table。
当我想要创建触发器时收到一些警告。你能帮帮我吗?
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;
/
您有一个额外的 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;
/
希望对您有所帮助。
我有 player_value 视图,其中包含来自玩家 table 的玩家 ID、玩家姓名和玩家姓氏。 如果我修改视图中的信息,我必须创建一个触发器来更新播放器 table。
当我想要创建触发器时收到一些警告。你能帮帮我吗?
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;
/
您有一个额外的 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;
/
希望对您有所帮助。