【发布时间】:2015-06-17 09:31:00
【问题描述】:
我有一个名为“收藏夹”的简单表格。
Favorites
| username | type_of_movie | like_or_dislike |
数据如下:
AAA, Action, Like
AAA, Romance, Dislike
...
我已经创建了一个触发器来计算最喜欢的类型并阻止用户喜欢所有类型。
CREATE OR REPLACE TRIGGER trgLike
BEFORE INSERT OR UPDATE ON Favorite
FOR EACH ROW
DECLARE
count number;
BEGIN
SELECT
COUNT(username) INTO count
FROM
Favorite
WHERE
username= :NEW.username AND like_or_dislike = 'Like';
IF (count = 3) THEN
RAISE_APPLICATION_ERROR(-20000,'Too much liking');
END IF;
END;
/
我希望用户能够喜欢 3 种类型的电影。
插入触发器工作得很好,但是当我尝试更新不喜欢的东西时,我得到了错误 ORA-04091 table is in mutation。第 6 行出错。
如何防止这种情况发生?我已经搜索过了,似乎我的更新会改变我选择的值,但我不知道如何。
我使用的是 Oracle 版本 11g。
【问题讨论】: