Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
O exceptie este un identificator in PL/SQL, care apare in timpul executiei unui bloc. Exista doua metode pentru aparitia unei exceptii:
O eroare Oracle se produce si exceptia asociata este declansata automat..
Putem declansa o exceptie explicita prin folosirea declaratiei RAISE intr-un bloc.
Putem trata exceptiile in sectiunea de exceptii a unui bloc.
EXCEPTION
WHEN exception1 [OR exception2 . ] THEN
statement1;
statement2;
.
[WHEN exception3 [OR exception4 . ] THEN
statement1;
statement2; . ]
[WHEN OTHER THEN
statement1;
statement2;
. ]
unde:
exception este numele unei exceptii predefinite sau numele exceptiei definita de utilizator declarata in interiorul unei sectiuni declarative.
statement este una sau mai multe instructiuni PL/SQL sau SQL.
OTHER este o clauza optionala de tratare a exceptiilor.
Exista o multime de exceptii predefinite, vom aminti doar cateva dintre acestea:
NO_DATA_FOUND
TOO_MANY_ROWS
INVALID_CURSOR
Exemplu:
Apelarea unor exceptii predefinite.
BEGIN SELECT . COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
statement1;
statement2;
WHEN TOO_MANY_ROWS THEN
statement1;
WHEN OTHERS THEN
statement1;
statement2;
statement3;
END;
Sintaxa exceptiei definite de programator:
exception EXCEPTION;
unde: exception este numele exceptiei;
Putem asocia exceptia declarata cu numarul unei erori standard folosind instructiunea PRAGMA EXCEPTION_INIT.
PRAGMA EXCEPTION_INIT(exception, error_number);
unde: exception este exceptia declarata anterior.
error_number este numarul erorii standard.
Exemplu:
DECLARE
e_products_invalid EXCEPTION;
PRAGMA EXCEPTION_INIT (e_products_invalid, -2292);
v_message VARCHAR2(50);
BEGIN
EXCEPTION
WHEN e_products_invalid THEN
:g_message := 'Codul produsului nu este valid.';
END;
Putem folosi comanda RAISE pentru construirea exceptiei explicite in interiorul unei sectiuni executabile.
RAISE exception;
unde:
exception este numele unei exceptii declarate anterior;
Functii pentru tratarea exceptiilor:
SQLCODE returneaza numarul erorii Oracle pentru exceptii interne.
SQLERRM returneaza un mesaj asociat unui numar de eroare.
Exemplu:
DECLARE
v_error_code NUMBER;
v_error_message VARCHAR2(255);
BEGIN
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_error_code := SQLCODE;
v_error_message := SQLERRM;
INSERT INTO errors VALUES(v_error_code,
v_error_message);
END;
Utilizand procedura RAISE_APPLICATION_ERROR putem raporta erorile in aplicatiile noastre si putem evita intoarcerea exceptiilor netratate. Sintaxa acestei proceduri este:
raise_application_error (error_number, message[, ]);
unde:
error_number este un numar specificat de utilizator pentru exceptie si este cuprins intre -20000 si -20999.
message este mesajul specificat de utilizator pentru exceptie, el fiind un sir de caractere nu mai lung de 2048 byte
Exemplu:
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20201,
'Manager is not a valid employee.');
END;
DELETE FROM emp
WHERE mgr = v_mgr;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20202,
'This is not a valid manager');
END IF;
Copyright © 2024 - Toate drepturile rezervate