1

さて、映画のレビュー担当者が同じ映画を2回評価しているかどうかを確認するトリガーを作成する必要があります。

私はこれを書いた:

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 エンジンにすでに組み込まれているプログラム的なことは何も行わないでください。

つまり、あなたの状況では、(userid、movieid)に一意の制約を作成します。

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

読むべきドキュメント:制約とトリガー

于 2012-12-10T12:10:28.960 に答える