Vous êtes sur la page 1sur 2

SUPMTI

RABAT

Base de données avancées ( PL/SQL)


Exercice 1
On désire construire une base de données Oracle « enseignement » pour gérer les activités
pédagogiques dans un établissement d’enseignement. Le schéma relationnel (simplifié) de
cette base de données est le suivant :
Etudiant (#NumEtudiant, Nom, Prenom, DateNaissance, Annee)
Professeur (#NumProf, Nom, Specialite, DateRecrutement, Grade)
Matiere (#NumMatiere, Nom, CoeffC, CoeffEx, NbHeures, NumProf)
Note (#NumEtudiant, #NumMatiere, NoteC, NoteEx)
Absence (#NumEtudiant, #NumMatiere, NbHeures)

On considère les hypothèses suivantes :


- L’année doit être entre 1 et 5 ;
- Tous les champs numériques sont des entiers d’au plus 5 chiffres. NoteC, NoteEx et
Nbheures sont des décimaux. Les attributs Nom, Prénom, Spécialité, Grade sont des
chaînes de caractères d’au plus 100 caractères ;
- Les clés primaires sont marquées par # ;
- Les clés étrangères sont soulignées.

1) Ecrire les requêtes SQL qui permettent de créer les différentes tables de la base de
données : Etudiant, Professeur, Matiere, Note, Absence. N’oublier pas les contraintes
d’intégrité : clés primaires, clés étrangères, contraintes de domaine.
2) Ajouter les contraintes d’intégrité suivantes :
a- Pour la table Note : noteC et noteEx doit être entre 0 et 20 ;
b- Pour la table Absence : Le nombre d’heures doit être strictement positif.

3) Réaliser un programme PL/SQL permettant :


1) de saisir en entrée le numero de l’étudiant
- effectue la mise à jour de sa note de l’examen dans la matière Base de données selon le
schéma suivant :
 si NbHeures < 5, faire une augmentation de 20% ;
 si 5 <= NbHeures <10, faire une augmentation de 10% ;
 sinon, faire une diminution de 20%.

4) Ecrire un programme PL/SQL permettant :

1/2
2) la mise à jour de la note d’examen de tous les étudiants de la table Note suivant les
conditions de la question 3.

Exercice 2
Considérons la base de données « enseignement ».
1) Créer la table Resultat (NumE, NomE, NumMatiere, Noteglobale). Ecrire un
programme PL/SQL permettant d’insérer dans la table Resultat tous les tuples
constitués du numéro d’un étudiant, de son nom, du code d’une matière et de la note
obtenue par cet étudiant dans cette matière. Le calcul de cette note doit tenir compte
des coefficients de contrôle continu et d’examen définis pour la matière en question.
Utiliser un curseur avec la boucle FOR…LOOP
2) Créer la table Classement (NumE, NomE, moy_generale, Mention). Ecrire un
programme PL/SQL permettant d’insérer dans la table Classement tous les tuples
constitués du numéro d’un étudiant, de son nom, de la moyenne générale obtenue dans
toutes les matières par cet étudiant et de sa mention (selon les conditions suivantes :
o Si moyenne< 10 ‘echec’
o Si 10<=moyenne< 12 ‘aucune mention’
o Si 12<= moyenne< 14 ‘ assez bien’
o Si 14<= moyenne< 16 ‘ bien’
o Si 16<= moyenne<= 20 ‘ très bien’
Exercice 3
Considérons la base de données « enseignement ».
1) Ecrire une procédure Affiche_Absence qui permet d’afficher le nombre d’absences
d’un étudiant dans une matière. Cette procédure a comme paramètres d’entrée le
numéro de l’étudiant et le numéro de matière. La procédure doit gérer les erreurs
suivantes :
- Numéro de l’étudiant erroné ;
- Numéro de matière erroné.
2) Créer une procédure Supprimer_etudiant qui permet de supprimer un enregistrement
dans la table Etudiant, avec en paramètre d’entrée le numéro de l’enregistrement à
supprimer. Si ce dernier comporte un enregistrement fils cela génère l’erreur ORA-
02292 qu’il faudra traiter. Créer un programme qui fait appel à la procédure
Supprimer_etudiant.

2/2

Vous aimerez peut-être aussi