Compte-Rendu 6
Gr 7
Rédigé par :
M. KARROUMI Ilyass
Encadré par :
Mme. NASIRI Samia
1|Page
Introduction :
Dans ce TP, nous allons continuer de pratiquer la programmation en PL/SQL en exploitant les
notions vues dans le cours à savoir le bloc PL/SQL anonyme en utilisant les boucles (LOOP,
FOR et WHILE), les exceptions, et les curseurs.
Important : Dans tout le TP vous utiliser le schéma HR, si vous avez oublié le mot de passe,
procéder comme suit pour l’initialiser : accéder à Invite de commandes cmd :
C:\Users\hp>sqlplus / as sysdba
SQL> alter user hr identified by hr123 account unlock;
Tâche 1
Dans la table EMPLOYEES de schéma HR, les employées ont des valeurs de l’attribut
employee_id comprise entre 100 et 206 avec un pas de 1.
1) Créer la table Temporaire T_EMP qui contient les enregistrement extraits de la
table employees relatives aux attributs Employee_id, First_name Last_name ,
JOB_ID, Salary.
2) En se basant sur la table Temporaire T_EMP, écrire un programme PL/SQL, en
utilisant les boucles, pour afficher les informations sur les employer triées de plus bas
salaire le au plus grand salaire, selon le message ci-dessous:
Salaire N° i est pour l'employé 'First_name Last_name c'est un 'JOB_ID' il touche Salary
SET SERVEROUTPUT ON ;
DECLARE
V_NOM T_EMP.FIRST_NAME%TYPE;
V_PRENOM T_EMP.LAST_NAME%TYPE;
V_FONCTION T_EMP.JOB_ID%TYPE;
V_SALAIRE T_EMP.SALARY%TYPE;
BEGIN
FOR I IN 1..106 LOOP
SELECT FIRST_NAME,LAST_NAME,JOB_ID ,SALARY INTO V_NOM ,V_PRENOM,V_FONCTION
,V_SALAIRE FROM T_EMP WHERE NUM = I ;
DBMS_OUTPUT.PUT_LINE('SALAIRE N '||I||' EST POUR L''EMPLOYÉ '||V_NOM ||'
'||V_PRENOM||' C''EST UN '||V_FONCTION||' IL GAGNE '||V_SALAIRE||' EURO');
END LOOP ;
END ;
2|Page
Après l’exécution On aura les messages suivant:
...
Tâche 2 - Bloc PL/SQL et Exceptions
Soit la table des Adhérents suivante ADHERENTS (id_adherent, nom, prenom ,
date_naissance, fonction)
id_adherent prenom, nom , date_naissance, fonction
100 BADR DOLIN 12/09/1980 Ingénieur
102 ASSOU TAHA 02/08/2003
111 HAMID TAHA 17/02/2002 Lycien
222 ALI FAN 12/09/1980 Professeur
123 KHALIL IBN SINA 12/09/1980 Technicien
210 YASSER SOFFI 12/09/1994 Etudiant
214 RIMI FAN 30/03/2000
3|Page
1. Créer la table ADHERENTS et insérer ces enregistrements
2. Écrire un bloc PL/SQL qui demande à l’utilisateur l’id_adherent de l’adhérent
puis il affiche son nom et son prénom et sa date de naissance.
SET SERVEROUTPUT ON;
ACCEPT ID PROMPT'DONNER ID';
DECLARE
ID ADHERENTS.ID_ADHERENT%TYPE := '&ID';
ENR ADHERENTS%ROWTYPE;
BEGIN
SELECT * INTO ENR FROM ADHERENTS WHERE ID_ADHERENT =ID;
DBMS_OUTPUT.PUT_LINE(ENR.ID_ADHERENT||' '||ENR.PRENOM ||' '|| ENR.NOM ||'
'||ENR.DATE_NAISSANCE);
END;
3. Refaire le même programme en introduisant les deux exceptions suivantes
- La 1ére affiche le message suivant si le id_adhérent n’existe pas (SVP vérifiez
vos informations, cet ID n’existe pas)
- La 2em affiche le message suivant si le l’adhérent correspondant n’a pas de
fonction (SVP vérifiez vos information, L’adhérent nom prénom n’a pas de fonction)
4|Page
ACCEPT ID PROMPT'DONNER ID_ADHERENT';
DECLARE
ID ADHERENTS.ID_ADHERENT%TYPE := '&ID';
ENR ADHERENTS%ROWTYPE;
NO_FONCTION EXCEPTION;
BEGIN
SELECT * INTO ENR FROM ADHERENTS WHERE ID_ADHERENT =ID;
DBMS_OUTPUT.PUT_LINE(ENR.ID_ADHERENT||' '||ENR.PRENOM ||' '|| ENR.NOM||' ' ||
ENR.DATE_NAISSANCE);
IF(ENR.FONCTION IS NULL) THEN
RAISE NO_FONCTION;
END IF ;
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('SVP VÉRIFIEZ VOS
INFORMATIONS CET ID N’EXISTE PAS');
WHEN NO_FONCTION THEN DBMS_OUTPUT.PUT_LINE('SVP VÉRIFIEZ VOS
INFORMATION, L’ADHÉRENT '||ENR.NOM||' '||ENR.PRENOM||' N’A PAS DE FONCTION');
END;
4. Écrire un bloc PL/SQL qui demande à l’utilisateur un Nom de l’adhérent puis il
affiche : son nom, son prénom et sa fonction,
SET SERVEROUTPUT ON;
ACCEPT NOM PROMPT'DONNER NOM DE L’ADHÉRENT';
DECLARE
V_NOM ADHERENTS.NOM%TYPE := '&NOM';
ENR ADHERENTS%ROWTYPE;
BEGIN
SELECT * INTO ENR FROM ADHERENTS WHERE NOM =V_NOM;
DBMS_OUTPUT.PUT_LINE(ENR.ID_ADHERENT||' '||ENR.PRENOM ||' '|| ENR.NOM||' ' ||
ENR.FONCTION);
END;
5|Page
4.1 Exécuter le programme en entrant le nom « FAN » et le nom « TOBKAL »
Pour FAN :
Pour TOBKAL :
4.2 Qu’ils sont les exceptions qu’on peut traiter à part. ?
L’exception de cas si la requête retourne plusieurs lignes.
L’exception de cas au il y’a une absence de données.
4.3 Refaire les programmes en prenant en compte ces exceptions
SET SERVEROUTPUT ON;
ACCEPT NOM PROMPT'DONNER NOM DE L’ADHÉRENT';
DECLARE
V_NOM ADHERENTS.NOM%TYPE := '&NOM';
ENR ADHERENTS%ROWTYPE;
BEGIN
SELECT * INTO ENR FROM ADHERENTS WHERE NOM =V_NOM;
DBMS_OUTPUT.PUT_LINE(ENR.ID_ADHERENT||' '||ENR.PRENOM ||' '|| ENR.NOM||' ' ||
ENR.FONCTION);
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('SVP VÉRIFIEZ VOS
INFORMATIONS CET NOM N’EXISTE PAS');
WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('ILA PLUSIEURS ADHÉRENTS
QUI ONT CE NOM.');
END;
FIN
6|Page