VALUES ('M', '2011-03-11 05:54:00', 6, 'Tiroli');
-- c'est une
perruche, impossible
La première insertion ne pose aucun problème, mais la seconde échoue.
LOCAL ou CASCADED
LOCAL : seules les conditions de la vue même sont vérifiées.
CASCADED : les conditions des vues sous-jacentes éventuelles sont également vérifiées. C'est l'option par défaut.
La vue V_Chien_race, par exemple, est définie à partir de la vue V_Chien. Si on ajoute WITH LOCAL CHECK OPTION à
V_Chien_race, les modifications et insertions dans cette vue devront vérifier uniquement les conditions de la vue elle-même,
c'est-à-dire race_id IS NOT NULL. Si par contre, c'est WITH CASCADED CHECK OPTION qui est choisi, alors les
modifications et insertions devront toujours vérifier les conditions de V_Chien_race, mais également celles de V_Chien
(espece_id = 1).
Exemple 1 : LOCAL
Code : SQL
CREATE OR REPLACE VIEW V_Chien_race
AS SELECT id, sexe, date_naissance, nom, commentaires, espece_id,
race_id, mere_id, pere_id, disponible
FROM V_Chien
WHERE race_id IS NOT NULL
WITH LOCAL CHECK OPTION;
-- Modification --- ------------ -UPDATE V_Chien_race
SET race_id = NULL
-- Ne respecte pas la condition de
V_Chien_race
WHERE nom = 'Zambo';
-- => Impossible
UPDATE V_Chien_race
SET espece_id = 2, race_id = 4 -- Ne respecte pas la condition de
V_Chien
WHERE nom = 'Java';
-- => possible puisque LOCAL CHECK
OPTION
-- Insertion --- --------- -INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- Respecte toutes les conditions
VALUES ('M', '2012-02-28 03:05:00', 'Pumba', 'Prématuré, à
surveiller', 1, 9);
-- => Pas de problème
INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- La race n'est pas NULL, mais c'est un chat
VALUES ('M', '2011-05-24 23:51:00', 'Lion', NULL, 2, 5);
-- => pas de problème puisque LOCAL
INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- La colonne race_id est NULL
VALUES ('F', '2010-04-28 13:01:00', 'Mouchou', NULL, 1, NULL);
-- => impossible
La première modification et la dernière insertion échouent donc avec l'erreur suivante :
Code : Console
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
350/414
www.openclassrooms.com
-- c'est une
perruche, impossible
La première insertion ne pose aucun problème, mais la seconde échoue.
LOCAL ou CASCADED
LOCAL : seules les conditions de la vue même sont vérifiées.
CASCADED : les conditions des vues sous-jacentes éventuelles sont également vérifiées. C'est l'option par défaut.
La vue V_Chien_race, par exemple, est définie à partir de la vue V_Chien. Si on ajoute WITH LOCAL CHECK OPTION à
V_Chien_race, les modifications et insertions dans cette vue devront vérifier uniquement les conditions de la vue elle-même,
c'est-à-dire race_id IS NOT NULL. Si par contre, c'est WITH CASCADED CHECK OPTION qui est choisi, alors les
modifications et insertions devront toujours vérifier les conditions de V_Chien_race, mais également celles de V_Chien
(espece_id = 1).
Exemple 1 : LOCAL
Code : SQL
CREATE OR REPLACE VIEW V_Chien_race
AS SELECT id, sexe, date_naissance, nom, commentaires, espece_id,
race_id, mere_id, pere_id, disponible
FROM V_Chien
WHERE race_id IS NOT NULL
WITH LOCAL CHECK OPTION;
-- Modification --- ------------ -UPDATE V_Chien_race
SET race_id = NULL
-- Ne respecte pas la condition de
V_Chien_race
WHERE nom = 'Zambo';
-- => Impossible
UPDATE V_Chien_race
SET espece_id = 2, race_id = 4 -- Ne respecte pas la condition de
V_Chien
WHERE nom = 'Java';
-- => possible puisque LOCAL CHECK
OPTION
-- Insertion --- --------- -INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- Respecte toutes les conditions
VALUES ('M', '2012-02-28 03:05:00', 'Pumba', 'Prématuré, à
surveiller', 1, 9);
-- => Pas de problème
INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- La race n'est pas NULL, mais c'est un chat
VALUES ('M', '2011-05-24 23:51:00', 'Lion', NULL, 2, 5);
-- => pas de problème puisque LOCAL
INSERT INTO V_Chien_race (sexe, date_naissance, nom, commentaires,
espece_id, race_id)
-- La colonne race_id est NULL
VALUES ('F', '2010-04-28 13:01:00', 'Mouchou', NULL, 1, NULL);
-- => impossible
La première modification et la dernière insertion échouent donc avec l'erreur suivante :
Code : Console
Partie 6 : Au-delà des tables classiques : vues, tables temporaires et vues matérialisées
350/414
www.openclassrooms.com
