Documente Academic
Documente Profesional
Documente Cultură
1. Pp ca o parte din codul nostrum o sa dea eroare. Incercam sa obtinem date despre
un angajat care nu exista. Trb sa vedem cum tratam posibilele cazuri de eroare.
Vom modifica putin sintaxa blocului.
Inainte de terminarea blocului putem trata asa numitele exceptii.
BEGIN
...
EXCEPTION
END;
In sesiunea de EXCEPTION trebuie sa prindem acele exceptii.Sectiunea
de try{} reprezinta partea de BEGIN pana la EXCEPTION, iar catch,
sesiunea de EXCEPTION. (try & catch de la Java, C#).
Notatie:
EXCEPTION
When tipException1 then
When tipException2 then
....
Avem o sectiune numita OTHERS
When others then (echivalentul lui exception prindem exceptiile
mai putin generale)
Tipuri de exceptii:
- when no_data_found incercam sa obtinem date din tabela dar selectul nostru nu
a returnat ceva;
- to_many_rows incercam sa introd date in variabila respectiva dar folosim un
select care returneaza mai multe randuri;
- mai multe exceptii vedem in capitolul 21
Jurnalizare:
Tabela de tip jurnal in care sa jurnalizam exceptiile
Avem o fct care se numeste SQLERRM care ne returneaza mesajul de eroare, SQLCODE
returneaza un cod al erorii
1. Sa facem 2 blocuri separate:
Facem un bloc in care sa obtina un salariu pt un angajat. Punem salariul intr-o variabila si
incercam sa-l impartim la nr de ani lucrati. Ar trebui sa rezulte un anumit nr. Pt un angajat
care nu exista ar trebui sa rezulte DIVISION BY ZERO.
In fct. de data angajarii calculam numarul de ani lucrati si impartim salariul la nr de ani.
Blocul respectiv va avea o sectiune de tip EXCEPTION in care tratam doar when
others (erorile generale), iar erorile generale le afisam deocamdata pe ecran.
END LOOP;
Incepem cu FOR:
Intr-un for vom afisa datele despre angajati: nume, prenume, salariu si marca (dbms..)
Luam marca angajatului, implementam cu 1 si afisam data despre angajat (select from
emp where marca =i)
Valoarea initiala poate sa fie 1, valoarea finala poate sa fie 1000 (de ex)
Val initiala poate sa fie min(employee_id) iar val finala max(employee_id)
Va trebui sa tratam exceptii pt ca s-ar putea ca un angajat cu marca 50 sa nu existe. Si sa
continuam daca nu exista un angajat cu o anumita marca.
Loop