Sunteți pe pagina 1din 2

1.

Scrieti un bloc PL/SQL în care se trateaza o exceptie pentru situatia in care se incearca deschiderea
de doua ori a unui cursor – exceptia CURSOR_ALREADY_OPEN (ex. se deschide un cursor folosind
OPEN și mai apoi se încearcă parcurgerea sa folosind FOR ... LOOP, acesta din urma deschizand din
nou cursorul).

set serveroutput on

DECLARE

cursor ang_cursor is select id_angajat, nume, salariul from angajati;

ang_id angajati.id_angajat%type;

ang_nume angajati.nume%type;

ang_sal angajati.salariul%type;

BEGIN

dbms_output.put_line('Lista cu salariariile angajatilor');

open ang_cursor;

loop

fetch ang_cursor into ang_id, ang_nume, ang_sal;

exit when ang_cursor%notfound;

dbms_output.put_line('Salariatul '||ang_nume||' are salariul: '||ang_sal);

end loop;

EXCEPTION

WHEN CURSOR_ALREADY_OPEN THEN

DBMS_OUTPUT.PUT_LINE('Cursorul este deja deschis!');

close ang_cursor;

end;

2. Modificați blocul PL/SQL de la exercitiul 1 astfel incat o excepție să fie generata atunci
când cursorul este inchis de doua ori - excepția INVALID_CURSOR.
set serveroutput on

DECLARE

cursor ang_cursor is select id_angajat, nume, salariul from angajati;

ang_id angajati.id_angajat%type;

ang_nume angajati.nume%type;
ang_sal angajati.salariul%type;

BEGIN

dbms_output.put_line('Lista cu salariariile angajatilor');

open ang_cursor;

loop

fetch ang_cursor into ang_id, ang_nume, ang_sal;

exit when ang_cursor%notfound;

dbms_output.put_line('Salariatul '||ang_nume||' are salariul: '||ang_sal);

end loop;

EXCEPTION

WHEN INVALID_CURSOR THEN

DBMS_OUTPUT.PUT_LINE('Cursorul este deja inchis!');

close ang_cursor;

close ang_cursor;

end;

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