Vous êtes sur la page 1sur 2

LOG660 - Base de données de haute performance

Chapitre 6: Contraintes d'intégrité en SQL


Solutions:

QUESTION 1

CREATE TRIGGER majNbRoles


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;

Vous aimerez peut-être aussi