【发布时间】:2015-12-07 06:03:56
【问题描述】:
我正在制作一个数据库来为游戏行业建模,它有两个看起来有点像这样的表:
PLAYABLE (Which games are playable on which consoles)
--------------------------------------------------
| Game_ID (int) | Console_Name (varchar(255)) | (both primary/foreign)
--------------------------------------------------
CONSOLE
--------------------------------------------------
| Console_Name (PK) | Exclusives (int) |
--------------------------------------------------
exclusives 属性给出了该控制台(并且只有该控制台)拥有的游戏数量。
因此,当我在“Playable”关系中插入一个新元组时,如果该“Game_ID”已经存在一次,那么我需要使用相应的“Console_Name”递减“Exclusives”属性。同样,如果它不存在,那么我会增加该控制台的独占数量。
我是 Oracle 新手,这是我为此创建触发器的尝试:
CREATE OR REPLACE TRIGGER Exclusives_Count
BEFORE INSERT ON Playable
FOR EACH ROW
BEGIN
DECLARE
Game_Count NUMBER;
Obsolete_Exclusive_Console VARCHAR(255);
SELECT COUNT(Game_ID) INTO Game_Count FROM Playable WHERE Game_ID = :NEW.Game_ID;
IF Game_Count = 0
THEN
UPDATE Console
SET Exclusives = Exclusives + 1
WHERE Console.Console_Name = :NEW.Console_Name;
ELSIF Game_Count = 1
THEN
SELECT Console_Name INTO Obsolete_Exclusive_Console FROM Playable WHERE Game_ID = :NEW.Game_ID;
UPDATE Console
SET Exclusives = Exclusives - 1
WHERE Console.Console_Name = Obsolete_Exclusive_Console;
END IF;
END;
/
输入这个会给我“警告:触发器创建时出现编译错误”,但我不确定我哪里出错了。
【问题讨论】: