首页 文章

PLSQL触发错误 . “正在变异,触发/功能可能看不到它”ORA-04091 [重复]

提问于
浏览
3

这个问题在这里已有答案:

当我在Oracle数据库项目中声明一个触发器时,我收到一个错误,其中说:

ERROR at line 1:
ORA-04091: table MIHAL277.LEAGUE_GAMES is mutating, trigger/function may not
see it
ORA-06512: at "MIHAL277.DELETE_UNUSED_GAME", line 4
ORA-04088: error during execution of trigger 'MB358996.DELETE_UNUSED_GAME'

基本上我正在创建一个管理桌游联赛的学术项目 . 所以有一个Game表和一个League表 . 还有一个League_Games表,表明联盟中是否有游戏可用(即联盟中的玩家是否玩这个游戏) . 联盟可以决定停止“拥有”一个游戏,然后将其从League_Games表中删除 . 但是当它发生时,我想运行一个触发器,检查是否仍有一些联赛使用该游戏,如果没有 - 从游戏桌中删除特定游戏的条目 .

我的触发器是这样的:

CREATE OR REPLACE TRIGGER delete_unused_game
BEFORE DELETE ON League_Games
FOR EACH ROW
DECLARE
   deleted_game_count integer;
BEGIN
    SELECT COUNT(*) 
    INTO deleted_game_count 
    FROM League_Games 
    WHERE Game_ID = :OLD.Game_ID;
    IF deleted_game_count = 0 THEN
        DELETE FROM Game
        WHERE ID = :OLD.Game_ID;
    END IF;
END;
/

因此,当我从Leage_Games中删除条目时,会出现错误 . 这个触发器出了什么问题?

1 回答

相关问题