complete guide pl sql exception handling with examples
Acest tutorial explică gestionarea excepțiilor PL SQL și conceptele conexe, cum ar fi tipurile de excepții, excepțiile definite de utilizator și cele definite de sistem, cum să creați o excepție etc.:
În PL / SQL Datetime Format de Seria PL / SQL , am aflat despre câteva funcții utile în jurul Datetime, Timestamp și Interval
În acest articol, vom discuta despre gestionarea excepțiilor în PL SQL. De asemenea, vom explora avantajele excepțiilor și cum să le ridicăm.
Să începem cu învățăturile !!
Ce veți învăța:
Manipularea excepțiilor PL SQL
O eroare sau un eveniment de avertizare se numește excepție. Se întâlnește în timpul execuției în timpul rulării programului PL / SQL. PL / SQL are mecanisme pentru a gestiona aceste condiții excepționale cu ajutorul blocului de cod EXCEPTION unde este definit cum să contracareze condiția de eroare.
cum să rupi DVD-urile gratuit
Există două tipuri de excepții. Acestea sunt enumerate mai jos:
- Excepții definite de utilizator.
- Excepții definite de sistem.
Unele dintre excepțiile populare definite de sistem sunt fara memorie și impartirea cu zero, având nume precum STORAGE_ERROR și respectiv ZERO_DIVIDE. Excepțiile definite de utilizator sunt declarate într-un pachet, subprogram sau în secțiunea de declarație a blocului de cod PL / SQL și ar trebui să li se atribuie nume.
Odată ce apare o excepție, fluxul natural de execuție este oprit și apoi execuția indică secțiunea de excepție a codului PL / SQL. În timp ce excepțiile definite de sistem sunt aruncate în mod implicit, cele definite de utilizator trebuie să fie aruncate în mod explicit de cuvântul cheie RAISE.
Astfel, gestionarea excepțiilor ajută la rezolvarea erorilor întâlnite în timpul execuției în timpul executării și nu în timpul compilării programului.
Avantajele manipulării excepțiilor
Avantajele sunt enumerate mai jos:
- Dacă codul nostru nu are o gestionare a excepțiilor, atunci de fiecare dată când executăm o instrucțiune, trebuie să verificăm erorile în executare.
- Dacă evităm gestionarea excepțiilor în codul nostru, erorile reale sunt ratate, ceea ce dă naștere unor alte erori.
- Tratarea excepțiilor permite omiterea mai multor verificări în cod.
- Oferă o mai bună lizibilitate a codului prin izolarea gestionarilor de erori în cod.
Sintaxa de gestionare a excepțiilor:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Excepția implicită se realizează cu CÂND ALȚI ATUNCI.
Să luăm în considerare un tabel numit CETĂŢEAN .
SELECT * FROM CITIZEN;
Am creat tabelul CITIZEN cu ajutorul declarației SQL de mai jos.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Introduceți valori în acest tabel cu instrucțiunile SQL date mai jos:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementarea codării cu gestionarea excepțiilor:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Ieșirea codului de mai sus:
În codul de mai sus, deoarece nu există cetățeni cu vârsta de 9 ani în tabelul CITIZEN, se ridică o excepție în timpul rulării.
Creșteți excepția în PL / SQL
O excepție poate fi ridicată în mod explicit de către dezvoltatori cu ajutorul cuvântului cheie RAISE.
Sintaxa pentru creșterea excepțiilor:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Aici excepția_n este numele excepției pe care o ridicăm. În acest fel, putem ridica atât excepțiile definite de utilizator, cât și cele definite de sistem.
Excepție definită de utilizator
Dezvoltatorii își pot crea propriile excepții și le pot folosi pentru gestionarea erorilor. Acestea pot fi create în partea de declarație a unui subprogram și pot fi accesate numai în interiorul acelui subprogram.
O excepție creată la nivelul pachetului poate fi utilizată ori de câte ori este accesat pachetul. O excepție definită de utilizator poate fi ridicată utilizând cuvântul cheie RAISE.
Sintaxa pentru o eroare definită de utilizator este:
DECLARE exception_n EXCEPTION;
Aici excepție_n este numele excepției pe care o ridicăm. Astfel putem declara o excepție dând un nume urmat de cuvântul cheie EXCEPTION. O excepție poate fi declarată într-un mod similar, așa cum sunt declarate variabilele. Cu toate acestea, o excepție este o condiție neașteptată și nu un element de date.
Scopul excepției în PL / SQL:
Regulile de aplicare pentru excepția PL / SQL sunt enumerate mai jos:
- O excepție nu poate fi declarată de mai multe ori în același bloc de cod. Dar putem declara aceeași excepție în două blocuri diferite de cod.
- O excepție declarată într-un bloc de cod este locală în acel bloc și globală pentru fiecare sub-bloc.
- Dacă declarăm din nou o excepție globală în interiorul unui sub-bloc, declarația locală anulează.
Să luăm din nou în considerare un tabel care se numește CITIZEN.
Implementarea codului cu excepții definite de utilizator:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Ieșirea codului de mai sus:
Excepție predefinită
În încălcarea regulilor bazei de date sau depășirea pragului dependent de sistem, o excepție internă este aruncată automat. Toate aceste erori au un număr unic și fiecare excepție este definită ca un nume. De exemplu, PL / SQL aruncă NO_DATA_FOUND excepție predefinită atunci când o interogare SELECT nu preia niciun rând.
Toate excepțiile predefinite de PL / SQL sunt declarate în pachetul STANDARD care se ocupă cu mediul PL / SQL.
Excepție | Eroare Oracle | COD SQL | Descriere |
---|---|---|---|
NUMAR INVALID | TIMP - 01722 | -1722 | Această excepție se ridică dacă conversia la un șir de caractere la un număr nu trece, deoarece șirul reprezintă un număr nevalid. |
ACCESS_INTO_NULL | ACUM - 06530 | -6530 | Această excepție este ridicată dacă unui obiect nul i se atribuie în mod natural o valoare. |
CASE_NOT_FOUND | ACUM - 06592 | -6592 | Această excepție este ridicată dacă nu este aleasă nicio opțiune din clauza WHEN și nu există o clauză ELSE. |
COLLECTION_IS_NULL | ACUM - 06531 | -6531 | Această excepție este ridicată atunci când codul încearcă să aplice metode de colectare, cu excepția EXISTS la un tabel imbricat sau un varray care nu este inițializat. Poate fi ridicat și dacă codul nostru încearcă să atribuie valori unui tabel imbricat sau al unui varray care nu este inițializat. |
DUP_VAL_ON_INDEX | TIMP - 00001 | -1 | Această excepție este ridicată dacă valorile duplicate sunt încercate să fie stocate într-o coloană care este constrânsă de un index unic. |
CURSOR_ALREADY_OPEN | ACUM - 06511 | -6511 | Această excepție este ridicată dacă codul nostru încearcă să deschidă un cursor deja deschis. |
INVALID_CURSOR | TIMP - 01001 | -1001 | Această excepție este ridicată dacă încercăm să facem câteva operații pe cursoare care nu sunt permise. De exemplu, încercarea de a închide un cursor deja închis. |
LOGIN_DENIED | TIMP - 01017 | -1017 | Această excepție este ridicată dacă programul a încercat să se conecteze la baza de date cu un nume de utilizator și o parolă necorespunzătoare. |
NU S-AU GASIT DATE | TIMP - 01403 | 100 | Această excepție este ridicată dacă o interogare SELECT nu obține rânduri. |
NOT_LOGGED_ON | TIMP - 01012 | -1012 | Această excepție este ridicată dacă încercăm să facem o operație de bază de date fără să ne conectăm la aceasta. |
PROGRAM_ERROR | TIMP - 06501 | -6501 | Această excepție este ridicată dacă programul PL / SQL a întâmpinat o eroare internă. |
ROWTYPE_MISMATCH | TIMP - 06504 | -6504 | Această excepție este ridicată dacă un cursor încearcă să returneze valori la o variabilă cu tip de date incompatibil. |
SELF_IS_NULL | ACUM - 30625 | -30625 | Această excepție este ridicată dacă se apelează o metodă membru fără a inițializa tipul său de obiect. |
STORAGE_ERROR | ACUM - 06500 | -6500 | Această excepție este ridicată dacă programul PL / SQL a rămas fără memorie sau memoria sa a fost deteriorată în timpul executării. |
TOO_MANY_ROWS | TIMP - 01422 | -1422 | Această excepție este ridicată dacă o interogare SELECT preia mai multe rânduri. |
SUBSCRIPT_BEYOND_COUNT | ACUM - 06533 | -6533 | Această excepție este ridicată dacă un indice este mai mare decât numărul total al numărului de elemente din colecție. |
SUBSCRIPT_OUTSIDE_LIMIT | ACUM - 06532 | -6532 | Această excepție este ridicată dacă un indiciu depășește intervalul de prag. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Această excepție este ridicată în cazul în care conversia într-un șir de caractere într-un id universal de rând nu trece deoarece șirul de caractere reprezintă un id de rând nevalid. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Această excepție este ridicată dacă Oracle așteaptă o resursă. |
VALUE_ERROR | ORA-06502 | -6502 | Această excepție este ridicată dacă apare o eroare matematică, de conversie, de trunchiere în programul nostru. |
ZERO_DIVIDE | ORA-01476 | -1476 | Această excepție este ridicată dacă încercăm să împărțim un număr la 0. |
Întrebări și răspunsuri frecvente
Q # 1) Care este o excepție predefinită în PL / SQL?
Răspuns: O excepție predefinită este aruncată automat de PL / SQL dacă există o încălcare a regulilor bazei de date de către un program.
Q # 2) Ce este gestionarea excepțiilor PL / SQL și de ce este necesară?
Răspuns: O eroare sau un eveniment neașteptat din program se numește excepție. Se oprește fluxul normal de execuție al programului. În PL / SQL, excepția este tratată într-un bloc EXCEPTION din cod și acțiunea corectă împotriva excepției este descrisă în interiorul acelui bloc.
Î # 3) Ce se înțelege prin tratarea excepțiilor?
Răspuns: Este metoda de a răspunde la evenimentele neașteptate care pot apărea în timpul executării codului.
Q # 4) Care sunt cele două forme de gestionare a erorilor?
Răspuns: Cele două forme de tratare a erorilor includ eroare în timpul compilării și eroare de rulare . Eroarea timpului de rulare are loc în timpul execuției programului din cauza datelor sau a logicii incorecte. Erorile din timpul compilării sunt surprinse în timpul compilării codului nostru.
Q # 5) Care este diferența dintre eroare și excepție?
Răspuns: Excepțiile sunt incidentele care sunt tratate cu ajutorul blocului try / catch și pot fi întâlnite atât în timpul compilării, cât și în timpul rulării executării programului. Erorile, pe de altă parte, sunt întâlnite numai în timpul rulării.
Concluzie
În acest tutorial, am discutat în detaliu câteva concepte de bază ale PL / SQL care sunt esențiale pentru gestionarea excepțiilor din programele noastre.
Am abordat următoarele subiecte enumerate mai jos:
- Excepții.
- Tipuri de excepții.
- Unele excepții predefinite.
În următorul tutorial, vom discuta despre tranzacțiile PL / SQL, conceptele OOPS și multe alte subiecte conectate.
Lectură recomandată
- Tutorial de gestionare a excepțiilor C # cu exemple de cod
- Excepții Java și gestionarea excepțiilor cu exemple
- Pachet PL SQL: Tutorial pachet Oracle PL / SQL cu exemple
- Manevrarea excepțiilor în C ++
- Tutorial PL SQL pentru începători cu exemple | Ce este PL / SQL
- Tutorial PL SQL Records cu exemple