Solutions PL SQL

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

Solutions des exercices

PL/SQL, Série n°1

Exercice 1:
-- Solution 1
-- commandes
set serveroutput on
-- bloc PL/SQL
begin
dbms_output.put_line('mon bloc PL/SQL fonctionne');
end;
/

-- Solution 2
-- commandes
variable g_mess varchar2(30)
-- bloc PL/SQL
begin
:g_mess:= 'mon bloc PL/SQL fonctionne';
end;
/
print g_mess
Exercice 2
-- commandes
define x=2
define y=4
set serveroutput on
-- bloc PL/SQL
declare
resu number;
begin
resu := &x/&y + &y;
dbms_output.put_line(resu);
end;
/

exercice 3
-- commandes
variable g_max number
begin
select max(deptno)
into :g_max
from dept;
end;
/
print g_max
Exercice 4
commandes
DEFINE p_name= education

BEGIN
SELECT MAX(deptno)+1
INTO :g_max
FROM dept;
INSERT INTO dept
VALUES(:g_max, '&p_name', NULL);
END;
/
select * from dept;

Exercice 5
DEFINE p_no= 10
DEFINE p_loc=biskra

BEGIN
UPDATE dept
SET loc='&p_loc'
WHERE deptno=&p_no;
COMMIT;
END;
/
select * from dept
where deptno = &p_no;
Exercice 6
DEFINE p_loc = Constantine
VARIABLE g_mess VARCHAR2(50)

BEGIN
DELETE dept
WHERE loc='&p_loc';
:g_mess:= SQL%ROWCOUNT ||'lignes supprimées';
END;
/
PRINT g_mess
SELECT * FROM dept;

PL/SQL, Série n°2

Exercice 1
set serveroutput on
define num = 60
declare
v_somme number(10,2);
begin
select sum(sal)
into v_somme
from emp
where deptno=#
dbms_output.put_line('la somme des salaires est: '
|| to_char(v_somme));
end;
/
Exercice 2:
-- Création de la table messages:
CREATE TABLE messages (resultat NUMBER(6)) ;

BEGIN
FOR i IN 1..10 LOOP
IF i=6 OR i=8 THEN NULL ;
ELSE INSERT INTO messages VALUES(i);
END IF;
END LOOP;
END;
/
SELECT * FROM messages;

Exercice 3:
define pnum=7566

DECLARE
v_sal emp.sal%TYPE;
v_pourc NUMBER(7,2):=0 ;
v_prime NUMBER(7,2) ;
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE empno= &pnum;
IF v_sal < 5000 THEN v_pourc:=.10;
ELSIF v_sal BETWEEN 5000 AND 10000 THEN v_pourc:=.15;
ELSE v_pourc:=.20;
END IF;
v_prime := v_sal * v_pourc;
DBMS_OUTPUT.PUT_LINE (‘la prime employé ’||&pnum||’ est ‘||v_prime) ;
END;
/
-- Solution avec l’instruction CASE:

DECLARE
v_sal emp.sal%TYPE;
v_pourc NUMBER(7,2):=0 ;
v_prime NUMBER(7,2) ;
BEGIN
SELECT sal INTO v_sal FROM emp
WHERE empno= &pnum;
CASE
WHEN v_sal<5000 THEN v_pourc:=.10;
WHEN v_sal BETWEEN 5000 AND 10000 THEN v_pourc:=.15;
WHEN v_sal> 10000 THEN v_pourc:=.20;
END CASE;
v_prime := v_sal * v_pourc;
DBMS_OUTPUT.PUT_LINE (‘la prime employé ’||&pnum||’ est ‘||v_prime) ;
END;
/

Exercice 4:
define num=7902
DECLARE
e_emp emp%ROWTYPE;
BEGIN
SELECT * INTO e_emp FROM emp
WHERE empno = &num;
DBMS_OUTPUT.PUT_LINE (‘le num: ‘||e_emp.empno||’le nom: ‘||e_emp.ename||
‘le salaire: ‘||e_emp.sal) ;
END ;
/
Exercice 5:
-- Pour simplifier, on donne la solution pour extraire seulement le nom de l’employé.

INSERT INTO emp (empno, ename)


VALUES (7901, ‘mima’);

Define inf = 7900


Define sup = 7902

DECLARE
TYPE tab IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
v_tab tab;
v_inf NUMBER:=&inf;
v_sup NUMBER:=&sup;
j BINARY_INTEGER :=1;
BEGIN
FOR i IN v_inf..v_sup
LOOP
SELECT ename INTO v_tab(j)
FROM emp WHERE empno=i;
j:= j+1;
END LOOP;
DBMS_OUTPUT.PUT_LINE (‘la liste des noms est:’);
FOR i IN v_tab.first..v_tab.last
LOOP
DBMS_OUTPUT.PUT_LINE (v_tab(i)) ;
END LOOP;
END;
/

You might also like