Saznajte kako postupati s iznimkama u PL / SQL-u



Ovaj je članak sveobuhvatan vodič o tome kako izvršiti rukovanje iznimkama u PL / SQL-u raspravljajući o raznim vrstama izuzetaka ponuđenih u PL / SQL-u.

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.

Rukovanje SQL-iznimkama u PL / SQL-EdurekaIspod 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_NULL06530-6530Povećava se kada se nulu objektu automatski dodijeli vrijednost.
CASE_NOT_FOUND06592-6592Povisuje se kada nijedan od izbora u klauzuli WHEN a CASE izjava je odabrana i ne postoji klauzula ELSE.
COLLECTION_IS_NULL06531-6531Poveć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_INDEX00001-jedanPovisuje se kada se pokušaju dvostruke vrijednosti pohraniti u stupac s jedinstvenim indeksom.
INVALIDNI_KURSOR01001-1001Povisuje se kada se pokušavaju izvršiti nedozvoljene radnje kursora, poput zatvaranja neotvorenog kursora.
POGREŠAN BROJ01722-1722Povisuje se kada pretvorba znakovnog niza u broj ne uspije jer niz ne predstavlja važeći broj.
PRIJAVA_ ODBIJENA01017-1017Povećava se kada se program pokuša prijaviti u bazu podataka s nevažećim korisničkim imenom ili lozinkom.
NE_PODATAK_NAĐEN01403+100Povisuje se kada izraz SELECT INTO ne vrati nijedan redak.
NOT_LOGGED_ON01012-1012Povisuje se kada se uputi poziv baze podataka bez povezivanja s bazom podataka.
PROGRAM_ERROR06501-6501Pojavljuje se kada PL / SQL ima unutarnji problem.
ROWTYPE_MISMATCH06504-6504Povisuje se kada kursor dohvaća vrijednost u varijabli koja ima nekompatibilan tip podataka.
SAMO_IS_NULL30625-30625Povisuje se kada se pozove metoda člana, ali instanca tipa objekta nije inicijalizirana.
STORAGE_ERROR06500-6500Povećava se kada PL / SQL ostane bez memorije ili je memorija oštećena.
TOO_MANY_ROWS01422-1422Povisuje se kada izraz SELECT INTO vrati više od jednog retka.
VALUE_ERROR06502-6502Povisuje se kada se dogodi pogreška u aritmetičkim rezultatima, pretvorbi, skraćivanju ili ograničenju veličine.
NULA_DIJELI014761476Povisuje 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.