Vous êtes sur la page 1sur 2

SUPMTI Année Universitaire: 2022-2023

RABAT

Devoir
Base de données avancées
5

Exercice 1:
Soit le schéma relationnel de la base de données :
DEPARTEMENT(NumDpt, LibDpt, Chef)
MATIERE(NumMat, LibMat, #NumDpt, Coefficient, Enseignant)
ETUDIANT(NumEt, Nom, Prenom, Adresse, DateNaiss,#NumDpt, NbAbsNJ)
NOTATION(#NumEt, #NumMat, Note)
MOYENNE(#NumEt, Nom, Prenom, NbAbs, Moyenne, Observations)
ABANDON(#NumEt, Nom, Prenom)

1. Ecrire un programme PL/SQL permettant de supprimer tous les enregistrements de la table


MATIERE. Si l’enregistrement comporte un enregistrement fils cela génère l’erreur ORA-02292 qu’il
faudra traiter.

2. L’objectif de cette question est d’alimenter ( remplir) la table MOYENNE. Ecrire un programme
PL/SQL qui calcule la moyenne pondérée pour chaque étudiant du département Informatique . La
moyenne n’est pas calculée pour les étudiants ayant plus de 25 absences injustifées ( colonne
NbAbsNJ). Pour les étudiants ayant entre 10 et 24 absences non-justifiées, il y a une pénalité de
0.5 point sur la moyenne. De plus, on indique quel est l’étudiant (ou l’étudiante) qui est le premier
de la classe (ou la première) ( utiliser la colonne Observations).
3. La table ABANDON est constituée d'étudiants désirant abandonner leur formation. Il faut
donc supprimer les références à ces étudiants et enlever ceux-ci de la liste des étudiants. On
prévoit une gestion d’erreur :
- Si aucun étudiant ne veut abandonner (i.e. table vide), alors on souhaite envoyer un message à
l'utilisateur, le prévenant de cette excellente situation.

1/2
Exercice 2:
Soit la base de données relationnelle, Employé, de schéma:

Employé ( Nempl ,Nom, Prénom, Adresse, Salaire, date_embauche, NumDep,Superieur)


Exemple : ( 1, ‘Bennani ‘, ‘Med’, ‘ Rabat’, 12000, 1, 2). Superieur est un numero d’un employe

Département (NumDep ,NomD, Local )


Exemple ( 1, ‘ informatique’, ‘casa’)
Questions:
1. Ecrire une procedure proc_emp qui pour un numero d’employé en entrée retourne son salaire et son
superieur. Gérer le cas d’erreur où l’employé n’est pas dans la table.
2. Ajouter une nouvelle colonne à la table Département, nommée NBEMP qui marque le nombre des
employés dans chaque département.
3. Pour chaque nouvelle opération dans la table Employé, le nombre d’employés du département doit
être incrémenté ou décrémenté ou m-a-j de 1. Ecrire un trigger réalisant cette opération.
4. Créer un package permettant de gérer les employes et leurs departements, en proposant les
opérations suivantes:
a) Une fonction privee valid_deptno ( V_deptno) qui renverra un booleen selon que le
departement existe ou non.
b) Une procedure publique nouveau_emp qui, pour un nouvel employe dont on connait le
nom, le prenom, l’adresse, le numero de departement, le numero de son superieur,
insérera ce nouvel employé dans la table Employé (utilisation d’un objet SEQUENCE)
si le n° du département est valide et générera un message ‘TRAITEMENT
INVALIDE’ s’il ne l’est pas. La date d’embauche sera systématiquement la date du
système et les valeurs par défaut seront les suivantes :
Salaire: 1000
NumDep: 1
Superieur : 10

c) Utiliser la procédure pour insérer un employé affecté à un département valide.

2/2

Vous aimerez peut-être aussi