Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Sql


Index » educatie » » informatica » Sql
» Tratarea exceptiilor


Tratarea exceptiilor


Tratarea exceptiilor

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;





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate