0% ont trouvé ce document utile (0 vote)
354 vues4 pages

Solution TP PLSQL 1

Le document présente 5 exercices sur le langage PL/SQL. L'exercice 1 montre comment afficher des informations sur un département à partir des tables EMP et DEPT. L'exercice 2 présente un programme pour afficher le nom et la fonction de l'employé ayant le salaire maximum. L'exercice 3 questionne la validité de ce programme. L'exercice 4 décrit la création d'une table EMP_FR similaire à EMP. L'exercice 5 décrit un programme pour copier les tuples de EMP vers EMP_FR en augmentant les salaires de 15%.

Transféré par

Ahmed Haddad
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
354 vues4 pages

Solution TP PLSQL 1

Le document présente 5 exercices sur le langage PL/SQL. L'exercice 1 montre comment afficher des informations sur un département à partir des tables EMP et DEPT. L'exercice 2 présente un programme pour afficher le nom et la fonction de l'employé ayant le salaire maximum. L'exercice 3 questionne la validité de ce programme. L'exercice 4 décrit la création d'une table EMP_FR similaire à EMP. L'exercice 5 décrit un programme pour copier les tuples de EMP vers EMP_FR en augmentant les salaires de 15%.

Transféré par

Ahmed Haddad
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Solution exercice 1:

EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO#)

DEPT (DEPTNO, DNAME, LOC)

[Link]
v_DNAME DEPT. DNAME %TYPE;
v_LOC DEPT. LOC %TYPE ;
v_nombre integer ;
BEGIN
SELECT DNAME, LOC
INTO v_DNAME, v_LOC
FROM DEPT
WHERE DEPTNO = 2 ;
SELECT count(*) INTO v_nombre
FROM EMP
WHERE DEPTNO = 2 ;
dbms_output.put_line('le département 2 s'appelle’||' ' || v_DNAME ||' ' || ‘Est localisé à’||' ' ||
v_LOC||' ' || ‘et contient ||' ' || v_nombre||' ' || ‘ employés’);
END;
2. Ecrire un programme PL/SQL qui affiche le nom et la fonction de l’employé ayant le
salaire max.

DECLARE
v_ENAME [Link]%TYPE ;
BEGIN
SELECT ENAME
INTO v_ENAME
FROM EMP
WHERE SAL = Select max(SAL) from EMP;
dbms_output.put_line(v_ENAME);
END;
3. Est-ce que le programme va fonctionner s’il y a plusieurs employés ayant un salaire max ?

Le programme ne va pas fonctionner dans ce cas et un message d’erreur va etre généré. Il faut
prévoir un curseur explicite pour se cas de problème.

SGBD 1
4. Créer une nouvelle table vide EMP_FR de même structure que EMP. On pourra, par soucis
de rapidité, recopier la table EMP dans EMP_FR pour en obtenir la structure, puis effacer tous
les tuples de EMP_FR.
CREATE TABLE EMP_FR AS SELECT *
FROM EMP ;
Delete from EMP_FR;
5. Écrire un programme PL/SQL permettant de recopier tous les tuples de la table EMP dans
la table en augmentant au passage leur salaire de 15 % les opérations nécessaires sur le salaire
et la commission.
DECLARE
Cursor c_emp is select * from emp;
v_Struct c_emp %ROWTYPE;
v_sal [Link]%TYPE
BEGIN
OPEN c_job;
LOOP
FETCH c_emp into v_struct;
EXIT WHEN c_emp %NOTFOUND;
v_sal := c_emp.sal *1.15;
Insert into EMP_FR values (v_struct. EMPNO, v_struct .ENAME, v_struct.JOB,
v_struct .MGR, v_struct.HIREDATE, v_sal, v_struct.COMM, v_struct.DEPTNO);
END LOOP;
END; /

SGBD 2
Exercice 2
On désire pouvoir consulter à tout instant les effectifs des différents blocs de TD en Licence
d’Informatique. Il s’agit de définir un programme PL/SQL permettant l’insertion automatique
de tuples dans une relation (table) EFFECTIF_PAR_BLOC. Cette information est
implicitement contenue dans la relation ETUDIANT.

EDUDIANT (numero_etudiant, nom_etudiant, numero_bloc)

EFFECTIF_PAR_ BLOC (numero_bloc, effectif_bloc)

On vous demande de définir un bloc PL/SQL intégrant les requêtes SQL nécessaires et
permettant d’insérer dans la relation EFFECTIF_PAR_BLOC les tuples constitués du numéro
de bloc et de son effectif calculé. Dans le bloc PL/SQL vous devez :

a. Déclarer un curseur explicite dont la requête fournie le nombre d’étudiants par BLOC.
Pour cela vous devez faire un groupement par BLOC et utiliser la fonction COUNT ( )
pour compter le nombre d’étudiants par BLOC.
b. Ouvrir et parcourir le curseur ligne par ligne par l’intermédiaire d’une boucle.
c. Insérer chaque ligne du curseur dans la table EFFECTIF_PAR_BLOC.

Exercice 2 :
declare
cursor insertion is
select numero_bloc, count(*)
from etudiant
group by numero_bloc;
numbloc number;
effectif number;
BEGIN
open insertion;
loop
fetch insertion into numbloc, effectif;
EXIT WHEN insertion%NOTFOUND ; --sortie boucle

SGBD 3
insert into effectif_par_bloc values(numbloc, effectif);
END LOOP;
end;
/

SGBD 4

Vous aimerez peut-être aussi