6.3 Extension de la structure des requêtes SFW
137
© Dunod – La photocopie non autorisée est un délit.
• la vue ne contient pas les clauses distinct ni group by;
• la vue ne contient pas de fonctions agrégatives;
• la vue ne contient pas de sous-requête qui cite la table de la vue;
• la vue contient l’identifiant primaire de la table de base;
• si la vue est définie sur une autre vue, celle-ci doit être elle-même modifiable.
Si la vue est définie sur plusieurs tables, on observe en outre les contraintes
suivantes :
• la vue n’est pas construite à partir des opérateurs ensemblistes union, intersect et except;
• si la vue est définie sur une jointure de deux ou plusieurs tables, seules celles
dont l’identifiant primaire est également identifiant de la vue peuvent faire
l’objet de modifications (voir section 5.4.9). Une vue définie sur la jointure de
CLIENT et COMMANDE permet de supprimer et modifier une ligne de
COMMANDE mais pas une ligne de CLIENT.
Une contrainte d’intégrité peut être associée à une vue grâce à la clause additionnelle
with check option. Celle-ci rend active la condition définissant la vue (clause
where), non seulement lors de l'extraction des données via cette vue, mais également en cas de modification. Si la clause with check option est spécifiée, alors
les modifications sont soumises à la condition de la vue, de telle sorte que l'état final
des données ne puisse violer celle-ci. Considérons la vue CLI, définie comme suit :
create view CLI(NCLI,NOM,ADRESSE,LOCALITE,CAT,COMPTE) as
select *
from
CLIENT
where CAT is null or CAT in ('B1','B2','C1','C2')
with check option
La requête suivante sera rejetée car elle viole la condition, rendue active en modification :
insert into CLI
values ('B313','DURAND','place Monge','Mons','D7',0)
6.3 EXTENSION DE LA STRUCTURE DES REQUÊTES SFW
6.3.1 Extension de la clause select
La clause select permet de spécifier les grandeurs à extraire de chaque ligne de la
table fictive (ou de l’ensemble des lignes pour les fonctions agrégatives) définie par
les clauses from/group-by/having. Toute expression qui renvoie une valeur pour
chaque ligne est valide : nom de colonne, constante, expression arithmétique, de
caractères ou de date. Il est aussi possible d’y inclure une requête SFW pourvu
qu’elle renvoie une seule valeur :
select NCOM, (select sum(QCOM*PRIX)
from
DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
Précédent

- 137/436

Suivant