complete guide pl sql exception handling with examples
Denne vejledning forklarer håndtering af PL SQL-undtagelser og relaterede begreber som typer af undtagelser, brugerdefinerede og systemdefinerede undtagelser, hvordan man hæver en undtagelse osv .:
I PL / SQL datatidsformat af PL / SQL-serien , vi lærte om nogle nyttige funktioner omkring Datetime, Timestamp og Interval
I denne artikel vil vi diskutere undtagelseshåndtering i PL SQL. Vi skal også undersøge fordelene ved undtagelser og hvordan man hæver dem.
Lad os starte med læringen !!
Hvad du lærer:
PL SQL Undtagelse Håndtering
En fejl eller en advarselshændelse kaldes en undtagelse. Det opstår under kørselstiden af PL / SQL-programmet. PL / SQL har mekanismer til at håndtere disse ekstraordinære forhold ved hjælp af EXCEPTION-kodeblokken, hvor det er defineret, hvordan man skal imødegå fejltilstanden.
bedste musik downloader app til android
Der er to typer undtagelser. De er anført nedenfor:
- Brugerdefinerede undtagelser.
- Systemdefinerede undtagelser.
Nogle af de populære systemdefinerede undtagelser er ikke mere hukommelse og division med nul, har navne som henholdsvis STORAGE_ERROR og ZERO_DIVIDE. Brugerdefinerede undtagelser er deklareret i en pakke, underprogram eller i erklæringsafsnittet i PL / SQL-kodeblokken og skal tildeles navne.
Når en undtagelse opstår, stoppes den naturlige udførelsesstrøm, og derefter peger udførelsen på undtagelsesafsnittet i PL / SQL-koden. Mens de systemdefinerede undtagelser kastes som standard, skal de brugerdefinerede undtages eksplicit af RAISE-nøgleordet.
Således hjælper undtagelseshåndteringen med at håndtere de fejl, der opstår under kørselstiden og ikke under kompilering af programmet.
Fordele ved undtagelseshåndtering
Fordelene er anført nedenfor:
- Hvis vores kode ikke har en undtagelsesbehandling, skal vi hver gang vi udfører en erklæring verificere fejl i udførelsen.
- Hvis vi undgår håndtering af undtagelser i vores kode, bliver de faktiske fejl gå glip af, hvilket giver anledning til nogle andre fejl.
- Undtagelseshåndteringen giver mulighed for at springe over flere verifikationer i koden.
- Det giver bedre læsbarhed af koden ved at isolere fejlhåndtererne i koden.
Undtagelseshåndteringssyntaks:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Standardundtagelsen udføres med NÅR andre SÅ.
Lad os overveje en tabel, der er navngivet BORGER .
SELECT * FROM CITIZEN;
Vi har oprettet CITIZEN-tabellen ved hjælp af SQL-sætningen nedenfor.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Indsæt værdier i denne tabel med SQL-sætninger angivet nedenfor:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Kodning Implementering med undtagelse håndtering:
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; /
Output af ovenstående kode:
I ovenstående kode, da der ikke er borgere med alderen 9 i CITIZEN-tabellen, hæves en undtagelse for runtime.
Hæv undtagelsen i PL / SQL
En undtagelse kan udtrykkes af udviklerne ved hjælp af nøgleordet RAISE.
Syntaksen for at hæve undtagelser:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Her er undtagelsen_n navnet på den undtagelse, vi hæver. På denne måde kan vi hæve både brugerdefinerede og systemdefinerede undtagelser.
Brugerdefineret undtagelse
Udviklerne kan oprette deres egne undtagelser og bruge dem til håndteringsfejl. De kan oprettes i erklæringsdelen af et underprogram og kan kun fås i det underprogram.
En undtagelse, der oprettes på pakkeniveau, kan bruges, når der er adgang til pakken. En brugerdefineret undtagelse kan hæves ved hjælp af RAISE-nøgleordet.
Syntaksen for en brugerdefineret fejl er:
DECLARE exception_n EXCEPTION;
Her, den undtagelse_n er navnet på den undtagelse, vi hæver. Således kan vi erklære en undtagelse ved at give et navn efterfulgt af nøgleordet UNDTAGELSE. En undtagelse kan erklæres på en lignende måde som variabler er deklareret. En undtagelse er dog en uventet tilstand og ikke et dataelement.
Undtagelsesomfang i PL / SQL:
Reglerne for anvendelsesområdet for PL / SQL-undtagelse er angivet nedenfor:
- En undtagelse kan ikke erklæres mere end én gang i den samme blok med kode. Men vi kan erklære den samme undtagelse i to forskellige kodeblokke.
- En undtagelse, der er erklæret inden for en kodeblok, er lokal inden for denne blok og global for hver underblok.
- Hvis vi igen erklærer en global undtagelse i en underblok, tilsidesætter den lokale erklæring.
Lad os igen overveje en tabel, der hedder CITIZEN.
Kodeimplementering med brugerdefinerede undtagelser:
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; /
Output af ovenstående kode:
Foruddefineret undtagelse
I strid med databaseregler eller overskrider den systemafhængige tærskel, kastes en intern undtagelse automatisk. Alle disse fejl har et unikt nummer, og enhver undtagelse er defineret som et navn. For eksempel, PL / SQL kaster NO_DATA_FOUND foruddefineret undtagelse, når en SELECT-forespørgsel ikke henter rækker.
Alle de foruddefinerede undtagelser fra PL / SQL er erklæret i STANDARD-pakken, der beskæftiger sig med PL / SQL-miljøet.
Undtagelse | Oracle-fejl | SQL-KODE | Beskrivelse |
---|---|---|---|
INVALID_NUMBER | TID - 01722 | -1722 | Denne undtagelse hæves, hvis konverteringen til en tegnstreng til et nummer ikke passerer, da strengen repræsenterer et ugyldigt tal. |
ACCESS_INTO_NULL | NU - 06530 | -6530 | Denne undtagelse hæves, hvis et null-objekt naturligvis tildeles en værdi. |
CASE_NOT_FOUND | NU - 06592 | -6592 | Denne undtagelse hæves, hvis ingen af mulighederne i WHEN-klausulen er valgt, og der ikke er nogen ELSE-klausul. |
COLLECTION_IS_NULL | NU - 06531 | -6531 | Denne undtagelse hæves, når koden forsøger at anvende indsamlingsmetoder undtagen EXISTS til en indlejret tabel eller varray, der ikke initialiseres. Det kan også hæves, hvis vores kode forsøger at tildele værdier til en indlejret tabel eller varray, der ikke initialiseres. |
DUP_VAL_ON_INDEX | TID - 00001 | -1 | Denne undtagelse hæves, hvis duplikatværdier forsøges lagret i en kolonne, der er begrænset af et unikt indeks. |
CURSOR_ALREADY_OPEN | NU - 06511 | -6511 | Denne undtagelse hæves, hvis vores kode forsøger at åbne en allerede åben markør. |
INVALID_CURSOR | TID - 01001 | -1001 | Denne undtagelse hæves, hvis vi forsøger at udføre nogle operationer på markører, som ikke er tilladt. For eksempel forsøg på at lukke en allerede lukket markør. |
LOGIN_DENIED | TID - 01017 | -1017 | Denne undtagelse hæves, hvis programmet forsøgte at logge på databasen med et forkert brugernavn og adgangskode. |
INGEN DATA FUNDET | TID - 01403 | 100 | Denne undtagelse hæves, hvis en SELECT-forespørgsel ikke henter rækker. |
NOT_LOGGED_ON | TID - 01012 | -1012 | Denne undtagelse hæves, hvis vi forsøger at udføre en databasehandling uden at oprette forbindelse til den. |
PROGRAM_ERROR | TID - 06501 | -6501 | Denne undtagelse hæves, hvis PL / SQL-programmet er stødt på en intern fejl. |
ROWTYPE_MISMATCH | TID - 06504 | -6504 | Denne undtagelse hæves, hvis en markør forsøger at returnere værdier til en variabel med inkompatibel datatype. |
SELF_IS_NULL | NU - 30625 | -30625 | Denne undtagelse hæves, hvis en medlemsmetode kaldes uden initialisering af objekttypen. |
STORAGE_ERROR | NU - 06500 | -6500 | Denne undtagelse hæves, hvis PL / SQL-programmet løb tør for hukommelse, eller dets hukommelse blev ødelagt under udførelsen. |
TOO_MANY_ROWS | TID - 01422 | -1422 | Denne undtagelse hæves, hvis en SELECT-forespørgsel henter flere rækker. |
SUBSCRIPT_BEYOND_COUNT | NU - 06533 | -6533 | Denne undtagelse hæves, hvis et abonnement er mere end det samlede antal af elementerne i samlingen. |
SUBSCRIPT_OUTSIDE_LIMIT | NU - 06532 | -6532 | Denne undtagelse hæves, hvis et abonnement er uden for tærskelområdet. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Denne undtagelse hæves, hvis konverteringen til en tegnstreng til et universelt række-id ikke overføres, da tegnstrengen repræsenterer et ugyldigt række-id. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Denne undtagelse hæves, hvis Oracle venter på en ressource. |
VALUE_ERROR | ORA-06502 | -6502 | Denne undtagelse hæves, hvis der opstår en matematisk, konverterings-, trunkeringsfejl i vores program. |
ZERO_DIVIDE | ORA-01476 | -1476 | Denne undtagelse hæves, hvis vi prøver at dele et tal med 0. |
Ofte stillede spørgsmål og svar
Q # 1) Hvad er en foruddefineret undtagelse i PL / SQL?
Svar: En foruddefineret undtagelse kastes automatisk af PL / SQL, hvis et program overtræder databasens regler.
Q # 2) Hvad håndteres PL / SQL-undtagelser, og hvorfor er det nødvendigt?
Svar: En fejl eller uventet begivenhed i programmet kaldes en undtagelse. Det standser den normale strøm af programmet. I PL / SQL håndteres undtagelsen inden for en EXCEPTION-blok i koden, og korrekt handling mod undtagelsen er beskrevet inde i den blok.
Q # 3) Hvad menes med undtagelseshåndtering?
Svar: Det er metoden til at reagere på uventede begivenheder, der kan opstå under udførelse af koden.
Spørgsmål nr. 4) Hvad er de to former for fejlhåndtering?
Svar: De to former for fejlhåndtering inkluderer kompileringsfejl og kørselstid fejl . Kørselstidsfejlen sker under udførelsen af programmet på grund af forkert data eller logik. Kompileringstidsfejlene fanges under udarbejdelsen af vores kode.
Q # 5) Hvad er forskellen mellem fejl og undtagelse?
Svar: Undtagelser er hændelser, der håndteres ved hjælp af prøve / fangstblok og kan opstå både i kompileringstid og kørselstid for programudførelsen. Fejlene er derimod kun stødt på kørselstidspunktet.
Konklusion
I denne vejledning har vi detaljeret diskuteret nogle grundlæggende begreber i PL / SQL, der er vigtige for at styre undtagelserne i vores programmer.
Vi har dækket nedenstående emner:
- Undtagelser.
- Typer af undtagelser.
- Nogle foruddefinerede undtagelser.
I den næste vejledning skal vi diskutere PL / SQL-transaktioner, OOPS-koncepter og mange flere forbundne emner.
Anbefalet læsning
- C # Exception Handling Tutorial med kodeeksempler
- Java-undtagelser og undtagelseshåndtering med eksempler
- PL SQL-pakke: Oracle PL / SQL-pakkevejledning med eksempler
- Undtagelseshåndtering i C ++
- PL SQL-vejledning til begyndere med eksempler Hvad er PL / SQL
- PL SQL Records Tutorial med eksempler