Ako ste programer, možda vam je poznat koncept postupanja s iznimkama sastavni je dio bilo kojeg . Budući da su pogreške neizbježne i čak i najpametniji od nas mogu pogriješiti dok pišu kod, moramo biti upoznati s načinom postupanja s njima. U ovom ćemo članku posebno učiti o rukovanju iznimkama u PL / SQL-u.
Ispod su teme obrađene u ovom članku:
Što je iznimka?
Svako abnormalno stanje ili događaj koji prekida normalan tijek naših programskih uputa u vrijeme izvođenja ili jednostavnim riječima iznimka je pogreška.
Sintaksa rukovanja iznimkama u PL / SQL-u
PROGLAŠITE POČETAK IZUZETKA KADA iznimka1 ZATIM iznimka1-obrada-izjave KADA iznimka2 ZATIM iznimka2-obrada-izjave KADA iznimka3 ZATIM iznimka3-obrada-izjave ........ KADA drugi ONDA iznimka3-obrada-izjave KRAJ
Ovdje možemo navesti onoliko iznimaka koliko želimo riješiti. Zadana iznimka obrađivat će se pomoću 'WHEN others THEN'
Primjer rukovanja iznimkama u PL / SQL-u
Program u nastavku prikazuje ime i adresu učenika čiji je ID naveden. Budući da u našoj bazi podataka nema učenika s vrijednošću ID-a 8, program pokreće izuzetak tijekom izvođenja NO_DATA_FOUND, koji je zabilježen u bloku EXCEPTION.
PROGLAŠITE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT name, loation INTO s_name, s_loc FROM students WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Lokacija:' || s_loc) OSIM KADA kada no_data_found THEN dbms_output.put_line ('Nema takvog učenika!') KADA drugi THEN dbms_output.put_line ('Ups, pogreška!') END
Izlaz
Nema takvog učenika! PL / SQL postupak uspješno završen.
Ovdje možemo navesti onoliko iznimaka koliko želimo riješiti. Zadana iznimka obrađivat će se pomoću ' KADA drugi ONDA '
Vrste izuzetaka u PL / SQL-u
- Sustav definiran
- Korisnik prkosi
Sljedeće u ovom članku o rukovanju iznimkama u Windowsima PL / SQL , razgovarajmo detaljno o obje ove vrste.
Sustav definiran
Te ih iznimke definira i implicitno održava Oracle poslužitelj, a uglavnom su definirane u Oracle standardnom paketu. Kad god se unutar programa dogodi iznimka, Oracle poslužitelj podudara se i identificira odgovarajuću iznimku iz raspoloživog skupa iznimki dostupnih u standardnom paketu oracle. U osnovi su ove iznimke unaprijed definirane u PL / SQL koja se podiže KADA se krši određeno pravilo baze podataka .
The Iznimke definirane sustavom su dalje podijeljeni u dvije kategorije:
- Imenovane iznimke sustava
- Neimenovane iznimke sustava
Imenovani sustavni izuzeci
Imenovane PL / SQL iznimke su imenovan u standardnom paketu PL / SQL , stoga programer ne mora definirati PL / SQL iznimke u svom kodu. PL / SQL pruža mnoge unaprijed definirane imenovane iznimke, koje se izvršavaju kad program krši bilo koje pravilo baze podataka. Sljedeća tablica navodi nekoliko važnih unaprijed definiranih iznimaka i minusa
Iznimka | Oracleova pogreška | SQLCODE | Opis |
ACCESS_INTO_NULL | 06530 | -6530 | Povećava se kada se nulu objektu automatski dodijeli vrijednost. |
CASE_NOT_FOUND | 06592 | -6592 | Povisuje se kada nijedan od izbora u klauzuli WHEN a CASE izjava je odabrana i ne postoji klauzula ELSE. |
COLLECTION_IS_NULL | 06531 | -6531 | Povećava se kada program pokuša primijeniti metode prikupljanja koji nisu POSTOJI na neinicijaliziranu ugniježđenu tablicu ili niz ili program pokušava dodijeliti vrijednosti elementima neinicijalizirane ugniježđene tablice ili polja. |
DUP_VAL_ON_INDEX | 00001 | -jedan | Povisuje se kada se pokušaju dvostruke vrijednosti pohraniti u stupac s jedinstvenim indeksom. |
INVALIDNI_KURSOR | 01001 | -1001 | Povisuje se kada se pokušavaju izvršiti nedozvoljene radnje kursora, poput zatvaranja neotvorenog kursora. |
POGREŠAN BROJ | 01722 | -1722 | Povisuje se kada pretvorba znakovnog niza u broj ne uspije jer niz ne predstavlja važeći broj. |
PRIJAVA_ ODBIJENA | 01017 | -1017 | Povećava se kada se program pokuša prijaviti u bazu podataka s nevažećim korisničkim imenom ili lozinkom. |
NE_PODATAK_NAĐEN | 01403 | +100 | Povisuje se kada izraz SELECT INTO ne vrati nijedan redak. |
NOT_LOGGED_ON | 01012 | -1012 | Povisuje se kada se uputi poziv baze podataka bez povezivanja s bazom podataka. |
PROGRAM_ERROR | 06501 | -6501 | Pojavljuje se kada PL / SQL ima unutarnji problem. |
ROWTYPE_MISMATCH | 06504 | -6504 | Povisuje se kada kursor dohvaća vrijednost u varijabli koja ima nekompatibilan tip podataka. |
SAMO_IS_NULL | 30625 | -30625 | Povisuje se kada se pozove metoda člana, ali instanca tipa objekta nije inicijalizirana. |
STORAGE_ERROR | 06500 | -6500 | Povećava se kada PL / SQL ostane bez memorije ili je memorija oštećena. |
TOO_MANY_ROWS | 01422 | -1422 | Povisuje se kada izraz SELECT INTO vrati više od jednog retka. |
VALUE_ERROR | 06502 | -6502 | Povisuje se kada se dogodi pogreška u aritmetičkim rezultatima, pretvorbi, skraćivanju ili ograničenju veličine. |
NULA_DIJELI | 01476 | 1476 | Povisuje se kada se pokuša podijeliti broj s nulom. |
Primjer
CREATE OR REPLACE POSTUPAK add_new_student (student _id_in na broju, student _name_in IN VARCHAR2) JE POČETAK umetnuti u studenta (student _id, učenik _name) vrijednosti (Studentov _id_in, učenik _name_in) iznimka kada DUP_VAL_ON_INDEX onda raise_application_error (-20001, 'Dvostruki učenik _id' ) KADA OSTALO ONDA podiže grešku_aplikacije (-20002, 'Dogodila se pogreška.') END
Nastavljajući u ovom članku o rukovanju iznimkama u PL / SQL-u, shvatimo što su neimenovane iznimke sustava.
Neimenovane iznimke sustava
Iznimke sustava za koje Oracle nema ime poznate su kao neimenovane iznimke sustava. Te se iznimke ne događaju često i napisane su s kodom i pridruženom porukom.
koja je razlika između preopterećenja i premošćivanja
U osnovi postoje dva načina za rješavanje neimenovanih iznimki sustava:
1. Korištenje rukovatelja iznimkom WHEN OTHERS
2. Pridruživanje koda iznimke imenu i njegova upotreba kao imenovana iznimka.
Neki koraci koji se slijede za neimenovane iznimke sustava su:
- Podignite ih implicitno.
- U slučaju da se tada ne postupa u 'KADA drugi', njima se mora eksplicitno rukovati.
- Da bi se izuzetak rukovao iznimkom, oni se mogu deklarirati pomoću Pragme EXCEPTION_INIT i rukovati pozivanjem na korisničko definirano ime iznimke u odjeljku iznimke.
Primjer rukovanja neimenovanim iznimkama pomoću Pragme EXCEPTION_INIT dat je kasnije u članku. Nastavljajući u ovom članku o rukovanju iznimkama u PL / SQL-u, shvatimo korisnički definirane izuzeće.
Korisnik definiran
Kao i svi drugi programski jezici, Oracle vam također omogućuje da oglas izvodite kao svoje iznimke. Za razliku od iznimki definiranih sustavom, ove se iznimke eksplicitno podižu u bloku PL / SQL.
Koraci za deklariranje korisnički definiranih iznimaka u Oracle bazi podataka
Korisnički definirane iznimke u Oracle bazi podataka možemo definirati na sljedeća 3 načina:
- Upotreba varijable tipa EXCEPTION
Ovdje možemo proglasiti korisnički definiranu iznimku deklariranjem varijable EXCEPTION vrsta podataka u našem kodu i eksplicitno ga podignite u našem programu pomoću RAISE izjave.
- Korištenje funkcije PRAGMA EXCEPTION_INIT
Neodređeni broj pogreške možemo definirati varijablom tipa podataka EXCEPTION
- Upotrebom metode RAISE_APPLICATION_ERROR
Korištenjem ove metode možemo deklarirati korisnički definiranu iznimku s vlastitim prilagođenim brojem pogreške i porukom.
Do sada ste možda imali grubu ideju o načinima na koje možemo podići korisnički definirane iznimke u PL / SQL-u. O svakoj od gore spomenutih metoda naučit ćemo s primjerima dalje u ovom članku o rukovanju iznimkama u PL / SQL-u.
Sljedeće u ovom članku, nastavimo s demonstracijama rukovanja iznimkama definiranim od strane korisnika.
fibonaccijeva serija c ++
Demonstracija korisnički definiranih iznimki
Nastavljajući u ovom članku o Rukovanju iznimkama u PL / SQL-u, shvatimo kako koristiti varijablu tipa EXCEPTION.
Upotreba varijable tipa EXCEPTION
Proces deklariranja korisnički definirane iznimke podijeljen je u tri dijela i ta su 3 dijela:
- Objavi tip podataka varijable iznimke
- Podignite iznimku
- Obradite iznimku
Napišimo kod koji će detaljno pokazati gornje korake.
PROGLAŠITE var_dividendni BROJ: = 10 var_divizor NUMBER: = 0 var_result NUMBER ex-DivZero OSIM
U gornjem bloku deklaracije imamo četiri varijable, među kojima su prve tri varijable normalnog broja podataka, a četvrta koja je ex_DivZero posebna je varijabla tipa podataka iznimke. Četvrta je naša korisnički definirana iznimka.
PROGLAŠITE var_dividendni BROJ: = 10 var_divizor NUMBER: = 0 var_result NUMBER ex-DivZero OSIM
Gornji dio izvršenja ovog anonimnog bloka pokrenut će se samo kada je djelitelj 0. Ako je djelitelj nula, kao što je to u našem slučaju, pogreška će se podići i kontrola programa preskočit će sve sljedeće korake i potražit će odgovarajući rukovatelj iznimkama. U slučaju da pronađe bilo koju drugu, izvršit će radnju u skladu s tim, u protivnom će ili prekinuti program ili će nas zatražiti s neobrađenom sistemski definiranom pogreškom.
OSIM KADA ex_DivZero THEN DBMS_OUTPUT.PUT_LINE (‘POGREŠKA, djelitelj ne može biti nula’)
Ovo je rukovatelj iznimkama. Čim korisnik unese djelitelj kao 0, zatražit će se gornji niz poruka.
Konačni kod:
PROGLAŠI var_dividenda BROJ: = 10 var_divizor BROJ: = 0 var_result BROJ ex-DivZero OSIM IZAĐAJA POČETAK AKO var_divisor = 0 ONDA POVEĆI ex-DivZero KRAJ IF var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('RESult var_PRI_LIND) = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Rezultat =' || var_result) END
Nastavljajući dalje u ovom članku o rukovanju iznimkama u PL / SQL-u, shvatimo kako se koristi metoda PRAGMA_EXCEPTION_INIT.
Korištenje funkcije PRAGMA EXCEPTION_INIT
U PRAGMA EXCEPTION_INIT funkcija, ime iznimke pridruženo je Oracleovom broju pogreške. Ovo se ime može koristiti u dizajniranju obrađivača iznimki za pogrešku.Za velike projekte s mnogo korisničkih grešaka, PRAGMA EXCEPTION_INIT je najkorisnija i najprikladnija metoda.
Sintaksa:
PRAGMA EXCEPTION_INIT (ime_izuzetaka, -Oracle_error_number)
Primjer
PROGLAŠITE deadlock_detected IZUZETAK PRAGMA EXCEPTION_INIT (deadlock_detected, -60) POČETAK NULL - Neka operacija koja uzrokuje pogrešku ORA-00060 IZUZETAK KAD je deadlock_detected THEN NULL - obrađuje pogrešku END
PRAGMA EXCEPTION_INIT govori prevoditelju da ime iznimke pridruži Oracleovom broju pogreške kao što je ranije spomenuto. Omogućuje vam pozivanje na bilo koju unutarnju iznimku imenom i za nju napišete određeni rukovatelj. Kad vidite hrpu pogrešaka ili slijed poruka o pogreškama, ona na vrhu je ona koja se može zarobiti i njome se rukovati.
Nastavljajući dalje u ovom članku o rukovanju iznimkama u PL / SQL-u, shvatimo kako se koristi metoda RAISE_APPLICATION_ERROR.
Upotrebom metode RAISE_APPLICATION_ERROR
To je postupak koji dolazi ugrađen u oracle softver. Korištenjem ovog postupka možemo povezati broj pogreške s prilagođenom porukom pogreške. Kombinirajući i broj pogreške i prilagođenu poruku o pogrešci, može se sastaviti niz pogrešaka koji izgleda slično onim zadanim nizovima pogrešaka koje Oracle prikazuje kada naiđe na pogrešku. Postupak RAISE_APPLICATION_ERROR nalazi se unutar DBMS_STANDARD paketa
Sintaksa
error_application_error (broj_greške, poruka [, TRUE])
Primjer
/ * Stvara se okidač trg_emp_detail_chk. * / IZRADI ILI ZAMIJENITE TRIGGER trg_emp_detail_chk / * Vrijeme okidača deklarirano je kao PRIJE AŽURIRANJA na tablici ZAPOSLENIH. * / Prije AŽURIRANJA NA zaposlenicima PROGLAŠITE_dopušteno_IZUZETAK POČINJE / * Počinje IF ako započne dan sistemskog vremena je ili subota ili nedjelja ili ne. * / AKO trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN rise_application_error (-20000, 'Niste ovlašteni za to bilo kakva izmjena vikendom !! ') / * Postupak rise_application_error poziva se s prvom vrijednošću parametra kao -20000, a s drugim parametrom sa zadanim tekstom koji navodi da korisnik nije ovlašten raditi bilo kakve izmjene vikendom. * / END IF END
Ovim smo došli do kraja ovog članka o “Rukovanju iznimkama u PL / SQL-u”. Nadam se da se ova tema dobro razumije i da vam je pomogla. Pokušajte napisati vlastite kodove i uključiti metode objašnjene u ovom članku.
Ako se želite obučiti od stručnjaka za ovu tehnologiju, možete se odlučiti za strukturirani trening od edureke! Pogledajte ovo Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Ovaj tečaj obučava vas o osnovnim konceptima i naprednim alatima i tehnikama za upravljanje podacima i upravljanje MySQL bazom podataka. Uključuje praktično učenje o konceptima kao što su MySQL Workbench, MySQL poslužitelj, modeliranje podataka, MySQL konektor, dizajn baze podataka, MySQL naredbeni redak, MySQL funkcije itd. Na kraju treninga moći ćete stvoriti i upravljati vlastitom MySQL bazom podataka i upravljati njima podaci.
kako implementirati hashmapu
Imate pitanje za nas? Molimo navedite ga u odjeljku za komentare ovog članka 'Rukovanje iznimkama u PL / SQL-u', a mi ćemo vam se javiti što je prije moguće.