Académique Documents
Professionnel Documents
Culture Documents
Objectifs :
L’objectif de ce TP est de maitriser les curseurs en PL/SQL. A la fin de ce TP, l’étudiant sera
capable de :
I. Rappel:
Curseurs implicites : les curseurs implicites sont créés et gérés par le serveur Oracle.
Vous n'y avez pas accès. Le serveur Oracle crée un tel curseur lorsqu'il doit exécuter
une instruction SQL LMD:
Curseurs explicites : Ils sont créés et gérés par l'utilisateur pour traiter un ordre Select
qui ramène plusieurs lignes. Le traitement du select se fera ligne par ligne.
1. Déclaration du curseur
2. Ouverture du curseur
3. Traitement des lignes
4. Fermeture du curseur.
1
TP2 SGBD : Les curseurs en PL/SQL
La déclaration d'un curseur: Le curseur se définit dans la partie DECALRE d'un bloc PL/SQL.
Dans la partie traitement du bloc PL/QLl, il faut commencer par ouvrir le curseur puis:
L’ordre fetch ne ramène qu’une seule ligne à la fois. De ce fait il faut recommencer l’ordre fetch pour
traiter la ligne suivante.
Exemple: Ecrire un bloc PL/SQL permettant d'afficher les noms et les salaires des employés
travaillant dans le département n°10
2
TP2 SGBD : Les curseurs en PL/SQL
Declare
Cursor DEPT_10 is select nome, salaire from emp where deptno =10;
Vnom emp.nome%TYPE ;
Vsalaire emp.salaire%TYPE ;
Begin
OPEN DEPT_10;
LOOP
END LOOP ;
CLOSE DEPT_10;
End;
II. Exercices :
1) Ecrire un bloc PL/SQL anonyme permettant d'afficher le nombre total des employés de la
société. Afficher également la proportion des manager dans le total des employés. L'affichage se
fera comme suit:
3
TP2 SGBD : Les curseurs en PL/SQL
Le nombre total des employés est 50 dont 4 sont des manager ce qui présente une proportion de
12.5%
2) Ecrire un bloc PL/SQL anonyme permettant de supprimer tous les départements de 'Sousse'.
Dans le cas où il n'y a aucun département à 'Sousse', afficher 'Aucun département à la ville de
Sousse' sinon afficher le nombre de département supprimés.
3) Créer une nouvelle table Historique_MAJ permettant de stocker l'historique des mises à jour
faites sur la table Dept:
- Ecrire un bloc PL/SQL anonyme permettant de mettre à jour les salaires des employés du
département n°20 et qui utilise le dernier curseur implicite pour afficher le nombre
d'enregistrements mis à jour. Le message 'Aucune mise à jour' sera affiché si aucune ligne n'est
mise à jour.
- Insérer dans la table Historique_MAJ le nombre d'enregistrement mis à jour dans la question
précédente. Si l'insertion a échoué, afficher le message 'Insertion impossible'.
4) Ecrire un bloc PL/SQL anonyme permettant d'afficher le salaire de l'employé 'Ben Sassi'. Si
l'employé n'existe pas, Afficher le message : Ben Sassi n'est pas un employé de la société.
1) Ecrire un bloc PL/SQL permettant d'afficher les Noms et les postes de tous les employés
travaillant aux départements situés à 'Tunis' ou 'Ben Arous'.
2) Ecrire un bloc PL/SQL anonyme permettant d’afficher les informations des trois qui employés
ayant les salaires les plus élevés. L'affichage se fera comme suit :
3) Ecrire un bloc PL/SQL permettant d'afficher pour chaque département, le nombre total
d’employés, le salaire le plus bas et le salaire le plus élevé. L'affichage se fera comme suit:
Département Ressources humaines – 54 Employés – Salaire max : 5200 – salaire min : 650
4
TP2 SGBD : Les curseurs en PL/SQL
Département Informatique -- 60 Employé – Salaire max : 6250 – salaire min : 850..
4) Ecrire un bloc PL/SQL permettant d'afficher les noms, les postes et les salaires des employés du
département n°10.
Département (Informatique)
Matricule Nom
12 Ben Sassi
……… ……
Département (Financier)
Matricule Nom
15 Ben Yahya
……… ……
Les départements doivent être triés par ordre Croissant de numdept. Les employés d’un même
département seront triés par ordre croissant de matr.
COMPETITION(CODC, NOMC)
1) Écrire un bloc PLSQL qui lit à la console le nom d'une compétition et qui affiche les participants
avec leur score total (la somme de tous les scores par tous les juges). Utilisez un curseur
paramétré.
5