触发PL / SQL检查多个条目

时间:2012-12-10 10:33:46

标签: oracle plsql triggers

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

我写了这个:

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;

问题在于,当我测试它时,我仍然可以为同一部电影评分同一部电影。有没有我不做的事情?

1 个答案:

答案 0 :(得分:2)

经验法则是

  

不要做任何已经在DBMS引擎中的程序设计

我的意思是,在你的情况下,在(userid,movieid)上创建一个唯一约束。

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

文件阅读:Constraints and Triggers