© Éditions Eyrolles
181
chapitre n° 5
Contrôle des données
Directive CHECK OPTION
La directive WITH CHECK OPTION empêche un ajout ou une modification non conformes à la
définition de la vue.
Interdisons l’ajout (ou la modification de la colonne compa) d’un pilote au travers de la vue
PilotesAF, si le pilote n’appartient pas à la compagnie de code 'AF'. Il est nécessaire de
redéfinir la vue PilotesAF. Le script suivant décrit la redéfinition de la vue, l’ajout d’un
pilote et les tentatives d’ajout et de modification ne respectant pas les caractéristiques de la
vue. Les messages sont très clairs.
Vues complexes
Une vue complexe est caractérisée par le fait qu’elle contient, dans sa définition, plusieurs
tables (jointures) et une fonction appliquée à des regroupements ou à des expressions. La mise
à jour de telles vues n’est pas toujours possible.
Pour pouvoir modifier une vue complexe, les restrictions sont les suivantes :
• La requête de définition ne doit pas contenir de sous-interrogation (jointure procédurale).
• Il n’est pas possible d’utiliser d’opérateur ensembliste (sauf UNION [ALL]).
La figure suivante présente deux vues complexes qui ne sont pas modifiables. La vue multitable Pilotes_multi_AF est créée à partir d’une jointure entre les tables Compagnie et
Pilote. La vue Moyenne_Heures_Pil est créée à partir d’un regroupement de la table
Pilote.
Tableau 5-16 Vue avec CHECK OPTION
Opérations possibles
Opérations impossibles
Recréation de la vue
CREATE OR REPLACE VIEW PilotesAF
AS SELECT * FROM pilote
WITH CHECK OPTION;
Nouveau pilote
INSERT INTO PilotesAF VALUES
('PL-11','Teste',900,'Revel','AF');
Query OK, 1 row affected (0.03 sec)
Ajout d’un pilote
INSERT INTO PilotesAF VALUES
('PL-9','Caboche',600,'Rennes','ASO');
ERROR 1369 (HY000): CHECK OPTION failed
'bdsoutou.PilotesAF'
Modification de pilotes
UPDATE PilotesAF SET compa='ASO';
ERROR 1369 (HY000): CHECK OPTION failed
'bdsoutou.PilotesAF'
Web
WHERE compa = 'AF'
Web
Précédent

- 203/418

Suivant