Documente Academic
Documente Profesional
Documente Cultură
Support de TP
SGBD
Ralis par :
BOUKCHIM Mosaab
(AT-Iset de Kef)
HOSNI Anis
(AT-Iset de Kef)
Niveau : Quatrime niveau en Informatique
Option : Informatique de gestion, Rseaux informatique
Version : 1.0
Plan
Support de TP SGBD
TP N 1 (MCD MERISE)
Tester vos connaissances
Exercice 1 : Centre mdical
On vous donne un MCD (Modle Conceptuel de Donnes) reprsentant des visites
dans un centre mdical. Rpondez aux questions suivantes :
A.U 2007/2008
2/28
Support de TP SGBD
Exercice 3 : Un journal
Voici le MCD du systme dinformation (trs simplifi) dun quotidien.
Exercice 4:
On trouve dans un SGBD relationnel les relations ci-dessous. Les cls primaires sont
soulignes, mais pas les cls trangres.
IMMEUBLE (Adresse, Nb-tages, Date-construction, Nom-Grant)
APPART (Adresse, Numro, Type, Superficie, Etage)
PERSONNE (Nom, Age, Code-Profession)
OCCUPANT (Adresse, Numro-Appart, Nom-Occupant, Date-arrive, Date-dpart)
PROPRIT (Adresse, Nom-Propritaire, Quote-part)
TYPE-APPART (Code, Libell)
PROFESSION (Code, Libell)
A.U 2007/2008
3/28
Support de TP SGBD
A.U 2007/2008
4/28
Support de TP SGBD
TP N 2 (SQL)
Employ Dpartement
I. Schma
Les exemples sont btis sur une base de donnes compose des deux relations suivantes :
A.U 2007/2008
5/28
Support de TP SGBD
Requte 16 : Quelles sont les personnes travaillant BOSTON et embauches avant le 1er
janvier 1990.
Requte 17 : Extraire les 10 premiers employs de lentreprise.
Requte 18 : Extraire les 10 plus chers employs.
Requte 19 : Nous ne voulons maintenant afficher que les 4 plus chers employs
Requte 20 : Extraire les 5 premiers employs de lentreprise ayant un salaire compris entre
1000 et 1300.
III. Astuces
TO_CHAR (date, format)
Format indique le format sous lequel sera affiche date. C'est une combinaison de codes ; en
voici quelques uns :
YYYY anne
YY deux derniers chiffres de l'anne
WW numro de la semaine dans l'anne
MM numro du mois
DDD numro du jour dans l'anne
DD numro du jour dans le mois
D numro du jour dans la semaine
HH ou HH12 heure (sur 12 heures)
HH24 heure (sur 24 heures)
MI minutes
Tout caractre spcial insr dans le format sera reproduit dans la chane de caractre rsultat.
On peut galement insrer dans le format une chane de caractres quelconque, condition de
la placer entre guillemets.
Chaque ligne rsultat du requte excut a un numro sauvegard dans ROWNUM ainsi pour
obtenir les 10 premires lignes d'une requte il suffit dcrire la requte suivante :
SELECT *
FROM EMP
WHERE ROWNUM <= 10;
Remarque:
Tout les TPS sont Nots.
A.U 2007/2008
6/28
Support de TP SGBD
Correction du
TP 2(Employ Dpartement)
Requte 1 : Liste des employs ayant une commission (non nulle), classe par commission
dcroissante.
select * from emp where comm is not null order by comm desc;
Requte 2 : Nom des personnes embauches depuis janvier 1991.
select * from emp where embauche> '1/01/1991';
Requte 3 : Liste des employs dont la commission est infrieure 10% du salaire.
select * from emp where comm < 0.1 * sal;
Requte 4 : Donner les noms des ingnieurs embauchs avant le 1 janvier 1990.
select * from emp where fonction = 'ingenieur' and embauche < '1/1/1990';
Requte 5 : Quelles sont les fonctions ne donnant pas lieu commission.
select distinct(fonction) from emp where fonction not in (select fonction from
emp where comm is not null);
Requte 6 : Donner les noms et fonctions de chacun. Classer le rsultat par fonction puis par
nom.
select nom,fonction from emp order by fonction;
select nom,fonction from emp order by nom;
Requte 7 : Donner les revenus annuels de chacun.
select nom, (sal+ nvl(comm,0))*12 from emp;
Requte 8 : Liste des employs travaillant OPERATIONS.
select * from emp,dept where dept.deptno = emp.deptno and dname =
OPERATIONS;
Requte 9 : Liste des subordonns de King
select * from emp where n_sup = (select empno from emp where nom =
'KING');
Requte 10 : Liste des employs ayant un subordonn ne se trouvant pas dans le mme
dpartement.
select ename from emp e1 where e1.empno in(select mgr from emp where
e1.deptno <> deptno);
A.U 2007/2008
7/28
Support de TP SGBD
select * from emp where n_sup = (select n_sup from emp where nom =
'KING');
Requte 12 : Donner pour chaque directeur son lieu de travail.
select
nom,lieu
from
emp,dept
where
fonction='DIRRECTEUR'
and
emp.deptno=dept.deptno;
Requte 13 : Liste des employs embauchs avant leur suprieur hirarchique.
select e1.nom from emp e1,emp e2 where e2.embauche<e1.embauche and
e2.empno=e1.n_sup;
Requte 14 : Donner le nom du suprieur hirarchique de JAMES.
select nom from emp where empno = (select n_sup from emp where nom =
'JAMES');
Requte 15 : Donner, pour chaque lieu les diffrentes fonctions des employs y travaillant.
select fonction,lieu from emp,dept where emp.deptno = dept.deptno group by
fonction,lieu order by lieu;
Requte 16 : Quelles sont les personnes travaillant BOSTON et embauches avant le 1er
janvier 1990.
select * from emp,dept where emp.deptno = dept.deptno and lieu='BOSTON'
and embauche < '1/1/1990;
Requte 17 : Extraire les 10 premiers employs de lentreprise.
select * from emp where rownum <= 10;
Requte 18 : Extraire les 10 plus chers employs.
select * from emp where rownum <= 10 order by sal desc;
Requte 19 : Nous ne voulons maintenant afficher que les 4 plus chers employs
select * from emp where rownum <= 4 order by sal desc;
Requte 20 : Extraire les 5 premiers employs de lentreprise ayant un salaire compris entre
1000 et 1300.
select * from emp where rownum <= 10 and sal >=1000 and sal <=1300;
A.U 2007/2008
8/28
Support de TP SGBD
TP N 3 (SQL)
Tour de France de cyclisme
Soit le modle relationnel suivant relatif la gestion simplifie des tapes
du Tour de France 2006, dont une des tapes de type "contre la montre
individuel" se droula Saint-Etienne :
EQUIPE(CodeEquipe, NomEquipe, DirecteurSportif)
COUREUR(NumroCoureur, NomCoureur, CodeEquipe*, CodePays*)
PAYS(CodePays, NomPays)
TYPE_ETAPE(CodeType, LibellType)
ETAPE(NumroEtape, DateEtape, VilleDp, VilleArr, NbKm, CodeType*)
PARTICIPER(NumroCoureur*, NumroEtape*, TempsRalis)
ATTRIBUER_BONIFICATION(NumroEtape*, km, Rang, NbSecondes,
NumroCoureur*)
Remarque : les cls primaires sont soulignes et les cls trangres sont
marques par *
Notes :
- La Tour de France de cyclisme est une comptition internationale
annuelle.
- Plusieurs quipes y participent.
- Une quipe est forme de coureurs de diffrentes nationalits.
- Un Tour est compos de plusieurs tapes.
- Une tape est un parcours entre deux villes.
- Une tape a un type. Exp : contre la montre , haute
montagne ,..etc.
- Dans une tape,il y a des kilomtres de bonification qui amliore le
temps ralis.
- Le classement est par tape et par Tour
- Le classement est par coureur et par quipe.
Questions :
1 - Quelle est la composition de l'quipe Festina (Numro, nom et pays des
coureurs) ?
2 - Quel est le nombre de kilomtres total du Tour de France 2006 ?
3 - Quel est le nombre de kilomtres total des tapes de type "Haute Montagne"?
4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
5 - Quels sont les noms des coureurs qui ont particip toutes les tapes ?
A.U 2007/2008
9/28
Support de TP SGBD
6 - Quel est le classement gnral des coureurs (nom, code quipe, code pays et
temps des coureurs) l'issue des 13 premires tapes sachant que les
bonifications ont t intgres dans les temps raliss chaque tape ?
7 - Quel est le classement par quipe l'issue des 13 premires tapes (nom et
temps des quipes) ?
A.U 2007/2008
10/28
Support de TP SGBD
Correction de TP N 3
1 - Quelle est la composition de l'quipe FESTINA (Numro, nom et pays
des
coureurs) ?
SELECT NumroCoureur, NomCoureur, NomPays
FROM EQUIPE A, COUREUR B, PAYS C
WHERE A.CodeEquipe=B.CodeEquipe And B.CodePays=C.CodePays
And NomEquipe="FESTINA" ;
2 - Quel est le nombre de kilomtres total du Tour de France 97 ?
SELECT SUM(Nbkm) FROM ETAPE ;
3 - Quel est le nombre de kilomtres total des tapes de type HAUTE
MONTAGNE ?
SELECT SUM(Nbkm) FROM ETAPE A, TYPE_ETAPE B
WHERE A.CodeType=B.CodeType And LibellType="HAUTE
MONTAGNE" ;
4 - Quels sont les noms des coureurs qui n'ont pas obtenu de bonifications ?
SELECT NomCoureur FROM COUREUR
WHERE NumroCoureur NOT IN (SELECT NumroCoureur FROM
ATTRIBUER_BONIFICATION) ;
5 - Quels sont les noms des coureurs qui ont particip toutes les tapes ?
SELECT NomCoureur FROM PARTICIPER A, COUREUR B
WHERE A.NumroCoureur=B.NumroCoureur
GROUP BY NumroCoureur, NomCoureur
HAVING COUNT(*)=(SELECT COUNT(*) FROM ETAPE) ;
6 - Quel est le classement gnral des coureurs (nom, code quipe, code pays
et temps des coureurs) l'issue des 13 premires tapes sachant que les
bonifications ont t intgres dans les temps raliss chaque tape ?
SELECT NomCoureur, CodeEquipe, CodePays, SUM(TempsRalis) AS Total
FROM PARTICIPER A, COUREUR B
WHERE A.NumroCoureur=B.NumroCoureur and NumroEtape<=13
GROUP BY A.NumroCoureur, NomCoureur, CodeEquipe, CodePays
ORDER BY Total;
7 - Quel est le classement par quipe l'issue des 13 premires tapes (nom
et
temps des quipes) ?
SELECT NomEquipe, SUM(TempsRalis) AS Total
FROM PARTICIPER A, COUREUR B, EQUIPE C
WHERE A.NumroCoureur=B.NumroCoureur And
B.CodeEquipe=C.CodeEquipe
And NumroEtape<=13
GROUP BY B.CodeEquipe, NomEquipe
ORDER BY Total;
A.U 2007/2008
11/28
Support de TP SGBD
TP N 4 ( SQL)
Soit la base de donnes CINEMA suivante :
FILM (NUM-F, TITRE, DATE, LONGUEUR, BUDGET, REALISATEUR,
SALAIRE-R)
GENERIQUE (FILM, ACTEUR, ROLE, SALAIRE)
PERSONNE (NUM-P, PRENOM, NOM, DATENAIS, SEXE,
NATIONALITE, ADRESSE, TELEPHONE)
CINEMA (NUM-C, NOM, ADRESSE, TELEPHONE, COMPAGNIE)
PASSE (NUM-F, CINEMA, HORAIRE, DATE-DEB, DATE-FIN, SALLE,
PRIX)
SALLE (NUM-S, CINEMA , TAILLE-ECRAN, PLACES)
NUM-F, NUM-P, NUM-C, NUM-S sont des identifiants uniques (cls
primaires) pour respectivement : FILM, PERSONNE, CINEMA, SALLE. Tout
nom de relation utilis comme attribut est une cl trangre qui renvoie
l'identifiant (cl primaire) de la relation correspondante, par exemple dans
GENERIQUE, FILM correspond NUM-F de FILM et est dfini sur le mme
domaine. REALISATEUR, dans FILM, correspond NUM-P.
1. Donner les titres des films raliss par Roman Polanski.
2. Donner les films qui ne passent dans aucun cinma de la compagnie FOX.
3. Donner le prnom, le nom et le numro des acteurs qui ont jou dans tous les
films de Lelouch.
4 Trouver le nom et le prnom des acteurs qui ont eu un salaire total plus
important, dans un film
particulier, que le salaire du ralisateur du mme film.
5. Pour chaque film de Bergman, trouver le nom et le prnom de l'acteur qui a eu
le plus gros
salaire pour un rle dans ce film.
6. Lister les cinmas dont la taille moyenne d'cran est suprieure 40 mtres
carr.
A.U 2007/2008
12/28
Support de TP SGBD
TP N 5 ( SQL)
Soit la base de donnes tennis :
JOUEUR ( numjoueur, nom, prenom, ann_naiss, nationalit)
GAIN ( nujoueur, lieutournoi, annee, prime, sponsor)
RENCONTRE (numgagant, numpardant, lieutournoi, annee, score)
a) Numro et tournoi dengagement (dfini par le lieu et lanne) des joueurs sponsoriss par
Peugeot entre 1990 et 1994 ;
b) Nom et anne de naissance des joueurs ayant particip Roland Garros en 1994 ;
c) Nom et nationalit des joueurs ayant particip la fois au tournoi de Roland Garros et
celui de Wimbledon, en 1992 ;
d) Nom et nationalit des joueurs ayant t sponsoriss par Peugeot et ayant gagn Roland
Garros au moins un match (avec un sponsor quelconque);
e) Nom des joueurs ayant toutes leurs primes Roland Garros suprieures 1MF ;
f) Numros des joueurs qui ont toujours perdu Wimbledon, et toujours gagn Roland
Garros ;
g) Liste des vainqueurs de tournoi, mentionnant le nom du joueur avec le lieu et lanne du
tournoi quil a gagn ;
m) Moyenne des primes gagnes par anne.
n) Valeur de la plus forte prime attribue lors d'un tournoi en 1992, et noms des joueurs qui
l'ont touche.
o) Somme gagne en 1992 par chaque joueur, pour l'ensemble des tournois auxquels il a
particip (prsentation par ordre de gain dcroissant).
p) Noms et prnoms des vainqueurs du Simple Homme et du Simple Dame du tournoi de
Roland Garros en 1992.
q) Nom des joueurs ayant particip tous les tournois de Roland Garros.
r) Pour chaque joueur, noms des adversaires qu'il a toujours battus.
s) Noms des sponsors reprsents tous les tournois.
t) Noms des pays qui ont eu un vainqueur de tournoi chaque anne.
A.U 2007/2008
13/28
Support de TP SGBD
TP N 1 PL/Sql
- Affiche RI41 lcran
DECLARE
W_TEMP VARCHAR2(10)
BEGIN
W_TEMP:=RI41;
DBMS_OUTPUT.PUTLINE(W_TEMP);
END;
DECLARE
W_TEMP VARCHAR2(10);
W_TEMP2 VARCHAR2(10);
BEGIN
W_TEMP:=RI;
W_TEMP2:=41;
W_TEMP=W_TEMP||W_TEMP2;
DBMS_OUTPUT.PUTLINE(W_TEMP);
END ;
-- Affiche les nombres de 1 15
DECLARE
W_TEMP VARCHAR2(20) ;
BEGIN
FOR I IN 1..15 LOOP
W_TEMP:=i ;
DBMS_OUTPUT.PUT_LINE(W_TEMP);
END LOOP;
END;
-- Lecture table emp et affichage du premier enregistrement trouv
DECLARE
CURSOR CTP IS SELECT ename FROM emp;
W_LIBELLE VARCHAR(30);
A.U 2007/2008
14/28
Support de TP SGBD
BEGIN
OPEN CTP;
FETCH CTP INTO W_LIBELLE;
CLOSE CTP;
DBMS_OUTPUT.PUT_LINE(W_LIBELLE);
END;
A noter : ne prend en compte que le premier enregistrement trouv
-- Lecture table emp et affichage des 5 premiers noms
DECLARE
CURSOR CTP IS SELECT ename FROM emp;
W_LIBELLE VARCHAR(30);
BEGIN
FOR I IN 1..5 LOOP
FETCH CTP INTO W_LIBELLE;
DBMS_OUTPUT.PUT_LINE(W_LIBELLE);
END LOOP;
CLOSE CTP1;
END;
-- Lecture table emp et affichage de tous les enregistrements
DECLARE
CURSOR CTP IS SELECT ename FROM emp;
W_LIBELLE VARCHAR2(30);
BEGIN
open CTP;
LOOP
FETCH CTP INTO W_LIBELLE;
EXIT WHEN CTP%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(W_LIBELLE);
END LOOP;
close CTP;
END;
-- Lecture table emp et affichage du dernier Numro et nom
DECLARE
CURSOR CTP IS SELECT EMPNO, ename FROM emp ;
W_LIBELLE VARCHAR2(30) ;
W_NUM NUMBER(7,0) ;
BEGIN
OPEN CTP ;
LOOP
FETCH CTP INTO W_NUM,W_LIBELLE;
A.U 2007/2008
15/28
Support de TP SGBD
Utilisation de la fonction :
-- Revenue annual de claque employ
SELECT F_MTT (EMPNO) FROM EMP;
-- Revenue annual de lemploy numero 7698
SELECT F_MTT (7698) FROM dual;
Remarque: Essayer : SELECT F_MTT (7698) FROM emp;
Inetrpretez???
-- Somme de toutes les revenues
SELECT SUM(F_MTT (EMPNO)) FROM EMP;
-- Avec un DECLARE
A.U 2007/2008
16/28
Support de TP SGBD
DECLARE
W_TEMP NUMBER :=0 ;
BEGIN
W_TEMP:=F_MTT (7698);
DBMS_OUTPUT.PUT_LINE(W_TEMP);
END;
Exercice 4 :
Utilisation :
A.U 2007/2008
17/28
Support de TP SGBD
A noter : Dans le cas dune cration de fonction ou de procdure, cest le nom qui importe.
Le nom doit tre unique. Sinon, il faut utiliser des packages afin de regrouper les fonctions et
procdures et avoir la possibilit dutiliser le mme nom.
Exercice 3 :
Ecrire la procdure qui donne la liste de tous les employes (tris par empno).
Create or replace Procedure P_Affiche is
Cursor C is
Select empno, ename from emp
order by empno;
W_Num emp.empno %Type ;
W_Nom varchar2(30);
A.U 2007/2008
18/28
Support de TP SGBD
BEGIN
Open C;
LOOP
FETCH C into W_Num,W_Nom ;
Exit when C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( To_char (W_Num) || W_Nom) ;
END LOOP;
CLOSE C;
End P_Affiche;
Utilisation :
Execute P_Affiche;
A.U 2007/2008
19/28
Support de TP SGBD
TP N 2 PL/SQL.
Exemples de script PL/SQL.
Les extensions de SQL qui sappellent PL/SQL permettent de raliser des traitements
procduraux et de travailler avec des enregistrements tampons que lon appelle curseur ou
cursor. Ce sont les curseurs qui permettent des traitements de type boucle (loop, for). Le
PL/SQL propose galement toutes une srie de fonctions : fonctions dentres-sorties,
fonction de formatage de donnes (to_date pour mettre en forme les dates, to_char pour une
prsentation alphanumrique).
Notez :
le signe daffectation :=
la fonction daffichage put_line qui fait partie du package (ensemble de procdures et
fonctions regroupes) dbms_output ;
le signe de concatnation || qui permet de construire une ligne compose de plusieurs
parties ;
; matrialise la fin dune instruction PL/SQL et on indique la fin du traitement par /
declare
i number:=0;
begin
loop
i:=i+1;
dbms_output.put_line('voici le'|| i || ' ieme passage...');
exit when i=10;
end loop;
end;
/
SQL> start p10
voici le1 ieme passage...
voici le2 ieme passage...
voici le3 ieme passage...
voici le4 ieme passage...
voici le5 ieme passage...
voici le6 ieme passage...
voici le7 ieme passage...
voici le8 ieme passage...
voici le9 ieme passage...
voici le10 ieme passage...
PL/SQL procedure successfully completed.
A.U 2007/2008
20/28
Support de TP SGBD
DECLARE
v_francs REAL :=1000 ;
v_euro REAL ;
BEGIN
dbms_output.put_line(Valeur en francs :|| to_char(v_francs)) ;
v_euro := f_euro (v_francs) ;
dbms_output.put_line(Valeur en euros :|| to_char(v_euro)) ;
END ;
/
A.U 2007/2008
21/28
Support de TP SGBD
Attention : on ne voit rien si on active pas laffichage lcran pas la commande set
serveroutput on. Cette commande se tape en dbut de session sqlplus et reste valable pendant
toute la dure de la session.
SQL> set serveroutput on
SQL> start p10
ALLEN
BLAKE
JAMES
MARTIN
TURNER
WARD
PL/SQL procedure successfully completed.
A.U 2007/2008
22/28
Support de TP SGBD
Cet exemple ressemble au prcdent mais une autre table est impacte (insertion de lignes
dans cette table). Mais dans cette exemple la variable ligne a la mme structure quune ligne
de la table emp (c%rowtype), le curseur doit tre ouvert quand on en a besoin par la
commande open (pour des raisons dconomie de place mmoire). On transfre chaque ligne
du curseur une par une dans la variable ligne avec la commande fetch into.
La condition darrt est c%notfound cest dire que la boucle sarrte quand il ny a plus de
lignes traiter.
A.U 2007/2008
23/28
Support de TP SGBD
Les triggers.
Les triggers sont des procdures prdfinies qui seront dclenches (lances) de faon
automatique en plus lors de la ralisation sur la base de lopration SQL mentionne dans le
trigger ou dclencheur. Dans notre exemple, on souhaite chaque INSERT ou UPDATE sur
la table emp, vrifier que le salaire est compris dans une fourchette de salaire (les fourchettes
de salaire sont dfinies pour chaque mtier dans la table sal_guide). Il ny a pas de contrle
pour le prsident !
SQL> select * from sal_guide;
Appuyer sur ENTREE pour continuer...
MINSAL MAXSAL JOB
-------- -------- --------500 9500
SALESMAN
1000 4000
CLERK
1000 4000
ANALYST
2000 7000
MANAGER
Remarquez :
Create or replace trigger pour remplacer lancienne version du trigger sil existe dj,
:NEW qui est un oprateur qui permet de prciser la nouvelle valeur dun champ (il
existe aussi :OLD) ; ainsi on peut faire une distinction entre lancienne et la nouvelle
valeur dune rubrique qui va tre change.
FOR EACH ROW : toutes les lignes de la tables sont contrles.
La fonction RAISE_APPLICATION_ERROR qui permet denvoyer un message en
bas de lcran de lutilisateur.
create or replace trigger verif_salaire
before INSERT or UPDATE of sal,job on emp
for EACH ROW
when (NEW.job <> 'PRESIDENT')
DECLARE
vminsal number;
vmaxsal number;
BEGIN
select minsal,maxsal INTO vminsal,vmaxsal from sal_guide
where job= :NEW.job;
if :NEW.sal < vminsal or :NEW.sal > vmaxsal
then RAISE_APPLICATION_ERROR (-20601, 'Salaire' || :NEW.sal ||
'hors tranche pour la profession' || :NEW.job ||
'de l employe' || :NEW.ename);
end if;
end;
/
SQL> start p9
Trigger created.
A.U 2007/2008
24/28
Support de TP SGBD
TP N 4( PL/SQL)
Exercice 1 :
Soit le schma suivant :
AVION (AvNum, AvNom, Capacite, Localisation)
PILOTE (PlNum, PlNom, PlPrenom, Ville, Salaire)
VOL (VolNum, PlNum#, AvNum#, VilleDep, VilleArr, HeureDep, HeureArr)
Les performances des avions de marque Airbus voluent, aussi souhaite t-on faire des mises
jour
de la table VOL. Les temps de vol des avions de type A300 (avions n 1 et 4) doivent tre
rduits de 10 % et ceux des avions de type A310 (avions n 2 et 8) de 15 %. Il sagit de
dfinir un programme PL/SQL permettant ces modifications.
1. Recopier les tables PILOTE, AVION et VOL du compte DARMONT sur le vtre.
2. Dans un bloc PL/SQL anonyme, dclarer un curseur permettant de lire les donnes
suivantes : numro de vol, numro davion, heure de dpart et heure darrive des vols pour
lesquels lavion utilis est le n 1, 2, 4 ou 8. Pour chaque vol lu par le curseur, calculer le
temps de vol, le rduire dans la proportion voulue selon lavion utilis, puis mettre jour
lattribut HEUREARR de ce vol dans la table VOL.
3. Tester !
A.U 2007/2008
25/28
Support de TP SGBD
A.U 2007/2008
26/28
Support de TP SGBD
NbMaj
0
0
0
Date_derniere_Maj
NULL
NULL
NULL
A.U 2007/2008
27/28
Support de TP SGBD
Indications :
Dtermination du type de mise jour :
IF INSERTING THEN -- insertion
IF UPDATING THEN -- modification
IF DELETING THEN -- suppression
Date systme : SYSDATE
3. Tester leffet de la prsence et de labsence de la clause FOR EACH ROW sur le
comportement du dclencheur en utilisant une requte qui modifie plusieurs n-uplets (ex.
UPDATE EMP SET SAL = SAL * 1.05;)
A.U 2007/2008
28/28
Support de TP SGBD
o cls primaires,
o cls trangres (que lon pourra spcifier en incluant la clause ON DELETE CASCADE4
afin que lors de la suppression dune instance de superclasse, les ventuelles instances
correspondantes dans les sous-classes soient supprimes automatiquement),
o contrainte de domaine pour lattribut Type de la table Employe ;
un dclencheur par table correspondant une sous-classe pour les contraintes dexclusivit.
Les cinq dclencheurs mettre en oeuvre sont pratiquement identiques. Ils servent sassurer
que, alors de linsertion ou de la mise jour dun n-uplet dans une table correspondant une
sous-classe, ce n-uplet nest pas dj prsent dans une autre sous-classe de la superclasse.
Deux stratgies diffrentes peuvent tre employes pour ce faire :
1. rechercher la table correspondant la superclasse de la sous-classe traite, rechercher dans
la table-superclasse le type du n-uplet insr ou modifi dans la table-sousclasse ( laide
dune requte dynamique), vrifier que le type est correct (par exemple, PERM pour
Employe_Perm) ;
2. rechercher les tables correspondant aux autres sous-classes de la superclasse de la
sousclasse traite (curseur), pour chacune dentre elles, compter le nombre de n-uplets
didentifiant identique celui qui est insr ou modifi dans la table traite ( laide dune
requte dynamique), vrifier que le total de ces comptes est gal zro.
Implmenter chaque stratgie au moins une fois. Quelle est la moins coteuse ? La plus sre ?
tablir un jeu dessais permettant de tester toutes les contraintes mises en uvre ainsi que la
suppression de n-uplets en cascade.
A.U 2007/2008
29/28