AFTER INSERT ON RoleFilm FOR EACH ROW BEGIN UPDATE Personne SET nbRoles = nbRoles+1 WHERE id = :new.idActeur; END;
QUESTION 2
a)
CREATE TRIGGER ctrMaxGenres
BEFORE INSERT ON GenreFilm FOR EACH ROW DECLARE nbGenres INTEGER; BEGIN SELECT COUNT(*) INTO nbGenres FROM GenreFilm WHERE idFilm = :new.idFilm ;
IF nbGenres >= 5 THEN
RAISE_APPLICATION_ERROR(-20003, ‘La contrainte ctrMaxGenres est violée’); END IF; END;
b)
CREATE TRIGGER ctrPropreFilm
BEFORE INSERT ON RoleFilm FOR EACH ROW DECLARE leRealisteur INTEGER; BEGIN SELECT idRealisateur INTO leRealisateur FROM Film WHERE id = :new.idFilm;
IF leRealisateur = :new.idActeur THEN
RAISE_APPLICATION_ERROR(-20004, ‘La contrainte ctrPropreFilm est violée’); END IF; EXCEPTION -- Ignorer le cas ou le film ne possède pas de réalisateur WHEN no_data_found THEN NULL; END;
Note: l’exception no_data_found est levée si le SELECT ne retourne aucune ligne.
c)
CREATE TRIGGER ctrSortieFilm
BEFORE INSERT OR UPDATE ON Film FOR EACH ROW DECLARE annéeCourante INTEGER; BEGIN SELECT YEAR(SYSDATE) INTO annéeCourante FROM DUAL;
IF annéeCourante < :new.année THEN
RAISE_APPLICATION_ERROR(-20005, ‘La contrainte ctrSortieFilm est violée’); END IF; END;