Vous êtes sur la page 1sur 5

EMSI CASA

3IIR
PL/SQL For Oracle
Révision

Exercice 1
Dans cet exercice, nous souhaitons réaliser un système de gestion de comptes bancaires.
Pour ce faire nous créons les trois tables suivantes (les clés primaires sont marquées par # et
les clés étrangères sont soulignées) :

Identification (#NumCompte, DateCréation, NomClient, Adresse);


Opération (#NumCompte, #DateOpération, #TypeOpération, Montant);
Total (#NumCompte, Solde);

1) Ecrire un trigger qui se déclenche à chaque création de compte et qui initialise le solde à 0.
2) Ecrire un trigger qui se déclenche à chaque opération et qui met à jour le solde.
3) Ecrire une procédure Sup_Compte qui permet de supprimer un enregistrement dans la table
Identification avec en paramètre d’entrée le numéro du compte à supprimer. Cette procédure
doit gérer les erreurs suivantes :
- Numéro de compte erroné ;
- L’enregistrement à supprimer comporte un enregistrement fils.
4) Ecrire une procédure qui prend en entrée le numéro du compte et une date et qui affiche un
relevé de compte contenant les informations suivantes :
a- Identité du titulaire.
b- Liste des entrées et sorties postérieures à la date donnée.
c- Total de ces entrées et sorties.
d- Solde du compte.

Exercice 2
La base de données d'une agence de tourisme spécialisée dans les sports d'hiver contient les
schémas de relation suivants, dont la sémantique est claire (les clés primaires sont marquées
par # et les clés étrangères sont soulignées) :

STATION(#NumStation, NomStation, Altitude, Région)


HOTEL(#NumHotel, NomHotel, NumStation, Catégorie)
CHAMBRE(#NumChambre, #NumHotel, NombreLits, Tarif)
CLIENT(#NumClient, NomClient, Adresse, Téléphone)
RESERVATION(#NumClient, #NumHotel, #NumChambre, #DateDébut, DateFin, NombrePersonnes)

1) Ecrire un programme PL/SQL qui permet de lire le numéro d'un hôtel et d’augmenter le tarif
de toutes les chambres de cet hôtel par 20% si l’hôtel est de catégorie 3 étoiles ou par 35% si
l’hôtel est de catégorie 4 étoiles ou 5 étoiles.
2) Ecrire un programme permettant la mise à jour du tarif des chambres de tous les hôtels
suivant les conditions de l’exercice 1.
3) Ecrire une procédure Affiche_Nb_chambres qui permet d’afficher le nombre de chambres
d’un hôtel. Cette procédure a comme paramètre d’entrée le numéro de l’hôtel. La procédure
doit gérer l’erreur « numéro de l’hôtel erroné ».
4) Créer une fonction Recettes qui permette de calculer la recette d’un hôtel pour une année
donnée, avec en paramètres d’entrée le numéro de l’hôtel et l’année.

Exercice 3
On donne le schéma relationnel suivant :

Stations (#numStation, nomStation, altitude, numRegion)


Regions (#numRegion, nomRegion)
Activites (#numActivite, libelle)
Propose (#numStation, #numActivite, Prix)

Celui-ci permet de construire la base destinée à gérer les activités des offices de tourismes de
différentes stations de sport d’hiver en France. Ces stations, décrites par la table Stations,
proposent différentes activités : ski mais aussi tennis, piscine, … La table Propose est une table
d’association traduisant le lien maillé entre une station et les activités qu’elle propose aux
touristes. Les attributs de ces différentes tables sont soit des chaînes de caractères soit des
entiers. Les clés primaires sont marquées par # et les clés étrangères sont soulignées.

1) Ecrire un programme PL/SQL qui permet de lire le numéro d'une station et d’augmenter le
prix de toutes les activités proposées par cette station par 10% si l’altitude de la station est
inférieure à 1000m ou par 20% si l’altitude de la station est supérieure ou égale à 1000m.
2) Ecrire un programme permettant la mise à jour du prix de toutes les activités proposées par
toutes les stations suivant les conditions de la question 1.

3) Ecrire un programme PL/SQL qui permet de lire le nom d’une région et une altitude et qui
affiche les activités proposées par les stations de la région dont le nom est donné en entrée et
dont l’altitude est supérieure à celle donnée en entrée. Le programme doit gérer l’erreur «nom
de la région erroné».

Exercice 4
Considérons le schéma relationnel d’une base de données de gestion hospitalière (les clés
primaires sont soulignées et les clés étrangères sont marquées par #) :

Hôpital (NumHôpital, Nom, Ville)


Service (NumService, Nom, #NumHôpital, #NumDirecteur)
Salle (NumSalle, #NumService, #Surveillant, NbLits)
Employé (NumEmployé, Nom, DateRecrutement, adresse, ville)
Docteur (NumDocteur, spécialité)
Infirmier (NumInfirmier, Salaire)
Patient (NumPatient, Nom, adresse,Ville)
Hospitalisation (NumHospitalisation, #NumPatient, #NumService, #NumSalle, DateHospitalisation,
DuréeHospitalisation, #NumDocteurTraitant, PrixHospitalisation)
Dans ce schéma :
 le directeur d’un service est un docteur désigné par son numéro,
 le numéro de salle est local à un service (ex. dans le même hôpital il y a plusieurs salles
numéro 12),
 le numéro de service est global (clé primaire de la table Service)
 un surveillant de salle est un infirmier désigné par son numéro,
 les docteurs et les infirmiers sont des employés (ayant le même numéro en tant que
docteurs/infirmiers qu’en tant qu’employé).
 Un docteur peut travailler dans plusieurs hôpitaux.

1) Ecrire un programme PL/SQL permettant de calculer le nombre d’hospitalisations traitées


par chaque docteur dans l’hôpital N°123.
2) Ecrire une procédure Sup_employé qui permet de supprimer un enregistrement dans la table
Employé avec en paramètre d’entrée le numéro de l’employé à supprimer. Cette procédure doit
gérer les erreurs suivantes :
 Numéro de l’employé erroné ;
 L’enregistrement à supprimer comporte un enregistrement fils.

3) Ecrire une fonction qui calcule la recette de 2009 d’un hôpital avec en paramètre d’entrée le
numéro de l’hôpital. Cette fonction doit gérer l’erreur suivante : Numéro de l’hôpital erroné.
4) Considérons les tables Etudiant et Examen suivantes (les clés primaires sont soulignées et
les clés étrangères sont marquées par #):

Etudiant (NumEtudiant, Nom, Prénom)


Examen (NumExamen, #NumEtudiant, NomMatière, Note)

Ecrire des déclencheurs (triggers) qui réalisent le même contrôle que celui de la clé étrangère
NumEtudiant de la table Examen.

Exercice 5
Considérons le schéma relationnel suivant (les clés primaires sont marquées par # et les clés
étrangères sont soulignées) :

Matière (#CodeMatiere, NomMatiere, CoefficientControlContinu, CoefficientExamen)


Etudiant(#NumEtudiant, NomEtudiant, PrenomEtudiant)
Notation (#NumEtudiant, #CodeMatiere, NoteControlContinu, NoteExamen)

1) Réaliser un programme PL/SQL qui effectue la mise à jour des notes des examens des
étudiants dans la matière Génie logiciel selon le schéma suivant :

- si la note < 6, faire une augmentation de 5% ;


- si 6<= note <10, faire une augmentation d’un point ;
- si 10 <= note <=19, faire une augmentation de 2%.

2) Ecrire une fonction qui permet d’afficher la moyenne générale d’un étudiant. Cette fonction
a comme argument le numéro de l’étudiant. Elle doit gérer le cas où le numéro de l’étudiant est
erroné.
3) Créer un trigger qui pour chaque modification de tuple de la table Notation, mémorise
l’ancienne et la nouvelle note d’examen dans une nouvelle table TRACE dont la structure est
à définir.

4) On souhaite gérer les résultats d’examens. Il s’agit de définir un programme PL/SQL


permettant l’insertion automatique d’informations dans la table Résultat, à partir des données
des tables Notation, Matière et Etudiant.

La structure de la table Résultat est la suivante :

Résultat (#NumEtudiant, NomEtudiant, CodeMatière, NoteGlobale)

Définir un programme PL/SQL permettant d’insérer dans Résultat 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, ainsi que de la possibilité d’avoir des valeurs
nulles pour les notes des étudiants, qui sont alors assimilées à 0 (utiliser la fonction NVL). Les
tuples considérés doivent être extraits des tables Notation et Matière de manière itérative, grâce
à un curseur adapté.

Exercice 6
On s’intéresse à une base de données stockant les performances des différents athlètes
participant aux meetings de la Fédération Internationale d’Athlétisme. La base de données est
décrite par les tables suivantes (les clés primaires sont marquées par # et les clés étrangères
sont soulignées) :

Athlète (#NumLicence, Nom, Prénom, NumFédération)


Fédération (#NumFédération, NomPays, Continent, DateCréation)
Résultat (#NumLicence, #NumMeeting, #Epreuve, Rang)
Meeting (#NumMeeting, NomMeeting)
RecordDuMonde (#Epreuve, NumLicence, Valeur)

La table RecordDuMonde contient le record du monde actuel pour chaque épreuve. L’attribut
Epreuve a des valeurs comme «100m masculin», «Saut en hauteur féminin» pour qui correspond
une valeur du record. Par exemple, pour « 100m masculin » la valeur du record est « 9s79 ».

1) Donnez les requêtes SQL permettant de créer les différentes tables de la base de données
(n’oubliez pas les contraintes d’intégrité : clé primaire, clé étrangère).
2) Modifier la table Résultat en ajoutant la contrainte d’intégrité « Rang doit toujours être
strictement positif ».
3) Formuler en SQL les requêtes suivantes :
a- Liste des meetings.
b- Liste des athlètes dont le nom commence par ‘F’.
c- Le nom et le prénom de l’athlète qui détient le record du monde du ‘1500m masculin’.
d- Les noms des pays africains dont la fédération a été créée en 1977.
e- Les noms des athlètes marocains.
f- Le nombre des athlètes participants dans chaque meeting.
g- Les numéros d’athlètes avec le nombre de meetings gagnés par chaque athlète.
h- Les noms des athlètes qui ont gagné tous les meetings (l’athlète doit être classé le premier).
Exercice 7
1) Ecrire un programme PL/SQL permettant de calculer le nombre d’épreuves gagnées par un
continent donné dans un meeting donné.
2) Ecrire une procédure Sup_Athlète qui permet de supprimer un enregistrement dans la table
Athlète avec en paramètre d’entrée le numéro de l’athlète à supprimer. Cette procédure doit
gérer les erreurs suivantes :
 Numéro d’athlète erroné ;
 L’enregistrement à supprimer comporte un enregistrement fils.

3) Ecrire un déclencheur qui met la date du jour de la création d’une ligne dans la colonne
DateCréation de la table Fédération, pour chaque ligne, si DateCréation est à NULL lors de
l’insertion.

Vous aimerez peut-être aussi