Sunteți pe pagina 1din 3

Université Kasdi Merbah Ouargla

Département d’informatique
3eme LMD SI Module ABD
Mars 2018
TD n° 2 : PL/SQL Oracle
Solutions
Ex01 : Blocs PL/SQL anonymes
1. Ecrire un bloc PL/SQL qui affiche l’indice i dans une boucle FOR i IN min..max LOOP .. END LOOP.

set serveroutput on -- sous SQLPLUS ou SQL Developer

DECLARE
i number(2);
BEGIN
FOR i IN 1..5 LOOP
dbms_output.put_line('Nombre : ' || i );
END LOOP;
END;

2. Ecrire un bloc PL/SQL qui affiche le nombre total des lignes de la table EMP.

DECLARE
cpt number(3);
i number(3);
BEGIN
select count(*) into cpt from emp;
FOR i IN 1..cpt LOOP
dbms_output.put_line('Nombre : ' || i );
END LOOP;
dbms_output.put_line('Nbr. total des employés : ' || cpt );
END ;

Ex02 : Les curseurs implicites


Ecrire un bloc PL/SQL qui supprime les employés du département n° 10 de la table EMP et affiche le nombre
d’employés supprimés.

DECLARE
nb_lignes integer;
BEGIN
DELETE FROM emp WHERE deptno = 10;
nb_lignes := SQL%ROWCOUNT;
dbms_output.put_line('Nombre de lignes supprimées : ' || nb_lignes );
ROLLBACK ;
END ;

Ex03: Les curseurs explicites


1. Ecrire un bloc PL/SQL qui totalise les salaires des employés de la table EMP.

En utilisant un curseur implicite


DECLARE
vtot_sal number(7,2) ;
BEGIN

Page : 1 S.EUSCHI
SELECT SUM(sal) INTO vtot_sal FROM emp ;
DBMS_OUTPUT.put_line(vtot_sal);
END;

En utilisant un curseur explicite


DECLARE
vsal emp.sal%TYPE ;
vtotal NUMBER(7,2) :=0 ;
CURSOR salaires IS
SELECT sal FROM emp ;
BEGIN
OPEN salaires ;
LOOP
FETCH salaires INTO vsal ;
EXIT WHEN salaires%NOTFOUND ;
IF vsal IS NOT NULL THEN
Vtotal := vtotal + vsal ;
END IF ;
END LOOP ;
CLOSE salaires ;
DBMS_OUTPUT.put_line(vtotal);
END;

2. Ecrire un bloc PL/SQL qui affiche le n° département, son nom et sa localisation en utilisant le type %ROWTYPE.

DECLARE
CURSOR c_dept IS
SELECT deptno, dname, loc FROM dept ORDER BY deptno ;
vdept c_dept%ROWTYPE ;
BEGIN
OPEN c_dept ;
DBMS_OUTPUT.put_line('N°dept' || ' Nom ' || ' Ville');
LOOP
FETCH c_dept INTO vdept ;
EXIT WHEN c_dept%NOTFOUND ;
DBMS_OUTPUT.put_line(vdept.deptno || ' ' || vdept.dname || ' '|| vdept.loc);
END LOOP ;
CLOSE c_dept ;
END;

3. Ecrire un bloc PL/SQL qui affiche le n° département, son nom et sa localisation en utilisant la boucle FOR.
set serveroutput on
DECLARE
CURSOR c_dept IS
SELECT deptno, dname, loc FROM dept ORDER BY deptno ;
BEGIN
DBMS_OUTPUT.put_line('N°dept' || ' Nom ' || ' Ville');
FOR vdept IN c_dept
LOOP
DBMS_OUTPUT.put_line(vdept.deptno || ' ' || vdept.dname || ' '|| vdept.loc);
END LOOP ;
END;

Page : 2 S.EUSCHI
Ex04: les curseurs paramétrés
Ecrire un bloc PL/SQL qui affiche les noms et les fonctions des employés des départements 10, 20 et 30 en
utilisant un curseur paramétré.

DECLARE
CURSOR cur_emp(p_dept INTEGER) IS
SELECT deptno, ename, job FROM emp WHERE deptno = p_dept;
BEGIN
dbms_output.put_line ('***Département 10***');
FOR vemp IN cur_emp(10)
LOOP
dbms_output.put_line(vemp.deptno || ' '|| vemp.ename || ' '||vemp.job);
END LOOP;
dbms_output.put_line ('***Département 20***');
FOR vemp IN cur_emp(20)
LOOP
dbms_output.put_line(vemp.deptno || ' '|| vemp.ename || ' ' ||vemp.job);
END LOOP;
dbms_output.put_line ('***Département 30***');
FOR vemp IN cur_emp(30)
LOOP
dbms_output.put_line(vemp.deptno|| ' '|| vemp.ename|| ' '|| vemp.job);
END LOOP;
END;

Page : 3 S.EUSCHI

S-ar putea să vă placă și