1

好的,所以我需要创建一个触发器来检查电影的评论者是否对同一部电影进行了两次评分。

我写了这个:

create or replace 
trigger viewer_insert
BEFORE INSERT ON viewer
FOR EACH ROW

DECLARE
-- create a variable to store the count of rows
counter  number;

BEGIN

--Any reviewer can't review the same movie twice

SELECT count(*) INTO counter
FROM viewer
WHERE "USERID"=:new."USERID";

IF counter = 1
THEN  RAISE_APPLICATION_ERROR('-20012', 'Constraint Violated!');
END IF;
END;

问题是,当我测试它时,我仍然能够对同一部电影进行评分。有什么我没有做的吗?

4

1 回答 1

2

经验法则是

不要做任何已经在 DBMS 引擎中的程序化操作

我的意思是,在您的情况下,在(用户 ID、电影 ID)上创建一个唯一约束。

ALTER TABLE viewer
add CONSTRAINT user_movie_unique UNIQUE (userid, movieid);

要阅读的文档:约束和触发器

于 2012-12-10T12:10:28.960 回答