TP N°4 PL/SQL
Partie n°1
Exercice n°1
Écrire une petite procédure qui permet d’insérer un nouveau salarie dans la table salaries. Cette
procédure reçoit comme paramètres les valeurs à insérer.
Exercice n°2
Écrire une procédure qui met à jour les salaires des employés comme suit :
– Lorsque le salaire d’un salarie is null, alors on lui affecte le plus petit salaire (de tous les
salaries). Sinon on augmente le salaire avec une valeur souhaitée.
La procédure reçoit comme paramètres : le matricule de salarie et l’augmentation du salaire
(Augmentation)
Exercice n°3
Écrire une fonction qui permet de calculer le nombre de salariés dans la fonction est agent. Cette
fonction reçoit comme paramètre la fonction du salarie et retourne le nombre d’employés dans
cette fonction.
Exercice n°4
Considérons les tables suivantes :
Employes (Idemp Number(4),Nomemp varchar(15),prenomemp varchar(15),emailemp
varchar(25),telemp varchar(10),salaireemp Number(4),Iddaprtemp varchar(8) )
Departement (Iddepart varchar(8),Desdepart varchar(15)).
1) Ecrire une fonction PL/SQL permettant de retourner le salaire moyen de tous les employés d’un
département donné qui ne sont pas des chefs.
2) Créer une procédure en PL/SQL qui permet pour chaque département, afficher le nom du
département, le nom, le prénom et le salaire de l’employé ayant le plus grand salaire de ce
département.
Partie n°2
Créer les deux tables suivantes puis insérer les enregistrements de jeu d’essai.
1
1) Ecrire une Procédure nommée ps_créditer
Accepte en paramètre le numéro de compte et le montant puis ajouter une ligne à la table
mouvement.
La procédure doit effectuer le traitement suivant :
Renvoyer -1 si le numéro de compte n’existe pas.
Si le numéro de compte existe, ajouter un mouvement avec la date d’aujourd’hui et le sens ‘+’ et
incrémenter le solde avec le montant passé en paramètre.
Si l’ajout est effectué avec succès, la procédure renvoi le nouveau solde.
2) Ecrire une Procédure nommée PS_débiter
Accepte en paramètre le numéro de compte et le montant puis ajouter une ligne à la table
mouvement.
La procédure doit effectuer le traitement suivant :
Renvoyer -1 si le numéro de compte n’existe pas.
Renvoyer -2 si le montant a débité est supérieur au solde du compte.
Si nom, ajouter un mouvement avec la date d’aujourd’hui et le sens ‘–’ et décrémenter le solde
avec le montant passé en paramètre.
Si l’ajout est effectué avec succès, la procédure renvoi le nouveau solde.
3) Ecrire la fonction suivante :
Fonction nommée total_mouvement
Permettant de calculer et renvoyer le montant total des mouvements réalisés entre deux dates
données.
Total des mouvements = total des mouvements créditeurs – total des mouvements débiteurs
Jeu d’essai
Compte Mouvement
Ncompte Solde Seuil Nmouvement Ncompte Montant Sens Date_mvt
1000 10000 2000 10 3000 50000 + 01/03/19
2000 34000 4000 20 4000 4500 - 01/03/19
3000 67000 4000 30 2000 1000 + 18/02/19
4000 80000 5000 40 3000 1500 + 19/02/19
5000 36000 4000 50 2000 3000 - 22/02/19
70 4000 500 + 25/02/19
80 4000 3500 + 01/03/19
90 1000 300 + 01/03/19
100 5000 1500 - 10/03/19
110 1000 400 - 11/10/19
2
Create table Compte(Ncompte int primary key,Solde float,Seuil float);
Create table Mouvement(Nmouvement int primary key, Ncompte int, Montant float, Sens
char(1),Date_mvt date);
insert into comptes values(1000,10000,2000);
insert into comptes values(2000,34000,4000);
insert into comptes values(3000,67000,4000);
insert into comptes values(4000 ,80000,5000);
insert into comptes values(5000,36000,4000);
insert into Mouvements values(10,3000,50000,'+','01/03/19');
insert into Mouvements values(20, 4000, 4500, '-' , '01/03/19');
insert into Mouvements values(30, 2000, 1000, '+' , '18/02/19');
insert into Mouvements values(40, 3000, 1500, '+', '19/02/19');
insert into Mouvements values(50, 2000, 3000, '-', '22/02/19');
insert into Mouvements values(70, 4000, 500 , '+' , '25/02/19');
insert into Mouvements values(80, 4000, 3500, '+', '01/03/19');
insert into Mouvements values(90, 1000, 300 , '+', '01/03/19');
insert into Mouvements values(100, 5000, 1500, '-', '10/03/19');
insert into Mouvements values(110, 1000, 400, '-', '11/10/19');