Naučite se ravnati z izjemami v PL / SQL



Ta članek je izčrpen vodnik o tem, kako opraviti obravnavo izjem v PL / SQL z razpravo o različnih vrstah izjem, ponujenih v PL / SQL.

Če ste programer, morda poznate koncept ravnanja z izjemami, ki je njegov sestavni del . Ker so napake neizogibne in tudi najpametnejši med nami lahko delajo napake med pisanjem kode, moramo biti seznanjeni s tem, kako z njimi ravnati. V tem članku bomo izvedeli zlasti o ravnanju z izjemami v PL / SQL.

Obravnava izjem v SQL v PL / SQL-EdurekaSpodaj so teme, zajete v tem članku:





Kaj je izjema?

Vsako nenormalno stanje ali dogodek, ki prekine normalen potek naših programskih navodil med izvajanjem ali z enostavnimi besedami izjema, je napaka.

Sintaksa obravnave izjem v PL / SQL

IZJAVITE ZAČETEK IZJEME KDAJ izjema1 TADA izjema1-ravnanje-izjave KADA izjema2 KADAR izjema2-ravnanje-izjave KADA izjema3 TADA izjeme3-ravnanje-izjave ........ KDAJ druge TADAJ izjeme3-ravnanje-izjave KONEC

Tu lahko naštejemo toliko izjem, kolikor želimo obravnavati. Privzeta izjema bo obravnavana z uporabo 'WHEN others THEN'



Primer obravnave izjem v PL / SQL

Spodnji program prikazuje ime in naslov študenta, katerega ID je podan. Ker v naši bazi podatkov ni študenta z vrednostjo ID 8, program sproži izjemo med izvajanjem NO_DATA_FOUND, ki je zajeta v bloku EXCEPTION.

DECLARE 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) IZJEMO KDAJ no_data_found THEN dbms_output.put_line ('Nobenega študenta!') WHEN others THEN dbms_output.put_line ('Ups, napaka!') END

Izhod

Nobenega takega študenta! PL / SQL postopek je uspešno zaključen.

Tu lahko naštejemo toliko izjem, kolikor želimo obravnavati. Privzeta izjema bo obdelana z uporabo KDAJ drugi potem '

Vrste izjem v PL / SQL

  • Sistem definiran
  • Uporabnik kljuboval

Naslednje v tem članku o ravnanju z izjemami v PL / SQL , podrobno se pogovorimo o obeh vrstah.



Sistem definiran

Te izjeme, ki jih implicitno definira in vzdržuje strežnik Oracle, so v glavnem opredeljene v standardnem paketu Oracle. Kadar koli se v programu pojavi izjema, se Oracle strežnik ujema in prepozna ustrezno izjemo iz razpoložljivega nabora izjem, ki so na voljo v standardnem paketu oracle. V bistvu so te izjeme vnaprej določene v PL / SQL ki se dvigne KDAJ je kršeno določeno pravilo baze podatkov .

The Sistemsko določene izjeme nadalje razdeljeni v dve kategoriji:

  • Imenovane sistemske izjeme
  • Neimenovane sistemske izjeme

Poimenovane sistemske izjeme

Imenovane izjeme PL / SQL so imenovan v standardnem paketu PL / SQL , zato razvijalcu ni treba definirati izjem PL / SQL v svoji kodi. PL / SQL ponuja veliko vnaprej določenih imenovanih izjem, ki se izvajajo, kadar program krši katero koli pravilo baze podatkov. Naslednja tabela navaja nekaj pomembnih vnaprej določenih izjem in minusov

Izjema Napaka Oracle SQLCODE Opis
ACCESS_INTO_NULL06530-6530Zviša se, ko ničnemu predmetu samodejno dodeli vrednost.
CASE_NOT_FOUND06592-6592Poviša se, če nobena od možnosti v klavzuli WHEN v a Izjava CASE in ni nobenega stavka ELSE.
COLLECTION_IS_NULL06531-6531Poviša se, ko program poskuša uporabiti metode zbiranja, ki ne obstajajo, za neinicializirano ugnezdeno tabelo ali polje ali program poskuša dodeliti vrednosti elementom neinicializirane ugnezdene tabele ali vedra.
DUP_VAL_ON_INDEX00001-EnoPoviša se, ko se poskušajo podvojene vrednosti shraniti v stolpec z edinstvenim indeksom.
INVALID_CURSOR01001-1001Poviša se, ko poskušate narediti kurzor, ki ni dovoljen, na primer zapiranje neodprtega kurzorja.
INVALID_NUMBER01722-1722Poviša se, če pretvorba niza znakov v število ne uspe, ker niz ne predstavlja veljavne številke.
LOGIN_DENIED01017-1017Poviša se, ko se program poskuša prijaviti v bazo podatkov z neveljavnim uporabniškim imenom ali geslom.
NO_DATA_FOUND01403+100Poviša se, ko stavek SELECT INTO ne vrne nobene vrstice.
NOT_LOGGED_ON01012-1012Poviša se, ko je klic baze podatkov izdan, ne da bi bil povezan z bazo podatkov.
PROGRAM_ERROR06501-6501Poviša se, če ima PL / SQL notranji problem.
ROWTYPE_MISMATCH06504-6504Zviša se, ko kazalec pridobi vrednost v spremenljivki z nezdružljivim podatkovnim tipom.
SELF_IS_NULL30625-30625Zviša se, ko se prikliče metoda člana, vendar primerek vrste predmeta ni bil inicializiran.
STORAGE_ERROR06500-6500Poviša se, ko PL / SQL zmanjka pomnilnika ali če je pomnilnik pokvarjen.
TOO_MANY_ROWS01422-1422Poviša se, ko stavek SELECT INTO vrne več kot eno vrstico.
VALUE_ERROR06502-6502Poviša se, ko pride do napake v aritmetični, pretvorbeni, okrnjeni ali velikostni omejitvi.
ZERO_DIVIDE014761476Dvigne se, ko se število deli s nič.

Primer

USTVARI ALI NADOMESTI POSTOPEK add_new_student (študent _id_in V ŠTEVILO, študent _ime_in V VARCHAR2) SE ZAČNI VSTAVITI V študenta (študent _id, študent _ime) VREDNOTE (študent _id_in, študent _ime_in) RAZEN, KADAR DUP_VAL_ON_INDEX THEN dvig_aplikacija DOP_dvig_p.p. ) KDAJ DRUGI Nato dvig_aplikacije_napake (-20002, 'Prišlo je do napake.') END

Nadaljujemo v tem članku o ravnanju z izjemami v PL / SQL, da bomo razumeli, kaj so neimenovane sistemske izjeme.

Neimenovane sistemske izjeme

Sistemske izjeme, za katere Oracle nima imena, so znane kot neimenovane sistemske izjeme. Te izjeme se ne pojavljajo pogosto in so zapisane s kodo in pripadajočim sporočilom.

V bistvu obstajata dva načina za reševanje neimenovanih sistemskih izjem:

1. Uporaba obdelave izjem WHEN OTHERS

2. Povezovanje kode izjeme z imenom in uporaba kot imenovana izjema.

Za neimenovane sistemske izjeme je nekaj korakov:

  • Dvignite jih implicitno.
  • V primeru, da jih potem ne obravnavajo v 'KDAJ drugi', jih je treba obravnavati izrecno.
  • Če želite izrecno obravnavati izjemo, jih je mogoče prijaviti s pomočjo Pragme EXCEPTION_INIT in jih obdelati tako, da se sklicuje na uporabniško določeno ime izjeme v razdelku z izjemo.

Primer obravnave neimenovanih izjem z uporabo programa Pragma EXCEPTION_INIT je podan v nadaljevanju članka. Nadaljujemo v tem članku o ravnanju z izjemami v PL / SQL, da bomo razumeli uporabniško določene izjeme.

Uporabnik definiran

Tako kot vsi drugi programski jeziki tudi Oracle omogoča, da oglas navedete kot lastne izjeme. V nasprotju s sistemsko določenimi izjemami so te izjeme eksplicitno postavljene v bloku PL / SQL.

Koraki za prijavo uporabniško določenih izjem v zbirki podatkov Oracle

Uporabniško določene izjeme v zbirki podatkov Oracle lahko definiramo na naslednje 3 načine:

  • Uporaba spremenljivke tipa EXCEPTION

Tu lahko razglasimo uporabniško določeno izjemo, tako da spremenljivko EXCEPTION razglasimo podatkovni tip v naši kodi in jo izrecno dvignite v našem programu z uporabo stavka RAISE.

  • Uporaba funkcije PRAGMA EXCEPTION_INIT

S spremenljivko podatkovnega tipa EXCEPTION lahko določimo nedefinirano številko napake

  • Uporaba metode RAISE_APPLICATION_ERROR

S to metodo lahko prijavimo uporabniško določeno izjemo z lastno prilagojeno številko napake in sporočilom.

Do zdaj ste morda imeli grobo predstavo o načinih, kako lahko v PL / SQL uporabnikom določimo izjeme. Vsako od zgoraj omenjenih metod bomo spoznali s primeri v nadaljevanju tega članka o ravnanju z izjemami v PL / SQL.

V nadaljevanju tega članka nadaljujmo s predstavitvami uporabniško določenega ravnanja z izjemami.

Prikaz uporabniško določenih izjem

Nadaljujemo v tem članku o obravnavi izjem v PL / SQL, da bomo razumeli, kako uporabiti spremenljivko tipa EXCEPTION.

Uporaba spremenljivke tipa EXCEPTION

Postopek prijave uporabniško določene izjeme je razdeljen na tri dele in ti trije deli so:

  • Navedite spremenljivko podatkovnega tipa izjeme
  • Dvignite izjemo
  • Obravnavajte izjemo

Napišimo kodo, ki bo podrobno prikazala zgornje korake.

IZJAVA var_dividenda ŠTEVILKA: = 10 var_divizor ŠTEVILKA: = 0 var_result ŠTEVILO ex-DivZero IZJEMA

V zgornjem bloku deklaracije imamo štiri spremenljivke, med katerimi so prve tri spremenljivke običajnega števila podatkov in četrta, ki je ex_DivZero, je posebna spremenljivka podatkovnega tipa. Četrta je naša uporabniško določena izjema.

kaj naredi append v javi
IZJAVA var_dividenda ŠTEVILKA: = 10 var_divizor ŠTEVILKA: = 0 var_result ŠTEVILO ex-DivZero IZJEMA

Zgornji izvedbeni del tega anonimnega bloka bo začel delovati šele, ko bo delilec enak 0. Če je delilec enak nič, kot je v našem primeru, se bo napaka sprožila in nadzor programa bo preskočil vse naslednje korake in bo iskal ujemajoči se obravnavalec izjem. V primeru, da najde katero koli drugo, bo dejanje izvedel v skladu s tem, v nasprotnem primeru bo bodisi zaključil program bodisi nas bo pozval z neobdelano sistemsko določeno napako.

IZJEMA KDAJ ex_DivZero THEN DBMS_OUTPUT.PUT_LINE (‘NAPAKA, delitelj ne more biti nič ')

To je obravnavalec izjem. Takoj, ko uporabnik vnese delilec kot 0, se prikaže zgornji niz sporočila.

Končna koda:

IZJAVA var_dividenda ŠTEVILKA: = 10 var_divizor ŠTEVILO: = 0 var_result ŠTEVILO ex-DivZero IZJEMA ZAČETEK ČE var_divisor = 0 TADA Dvigni ex-DivZero KONČEK Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('RESult var_ID = IFID = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividenda / var_divisor DBMS_OUTPUT.PUT_LINE ('Rezultat =' || var_result) END

Nadaljujemo v tem članku o ravnanju z izjemami v PL / SQL, da bomo razumeli, kako uporabljati metodo PRAGMA_EXCEPTION_INIT.

Uporaba funkcije PRAGMA EXCEPTION_INIT

V Funkcija PRAGMA EXCEPTION_INIT je ime izjeme povezano s številko napake Oracle. To ime lahko uporabimo pri načrtovanju izvajalca izjeme za napako.Za velike projekte z veliko uporabniško določenimi napakami je PRAGMA EXCEPTION_INIT najbolj uporabna in najprimernejša metoda.

Sintaksa:

PRAGMA EXCEPTION_INIT (ime_izjeme, -Oracle_error_number)

Primer

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Neka operacija, ki povzroči napako ORA-00060 EXCEPTION WHEN deadlock_detected THEN NULL - obravnava napako END

PRAGMA EXCEPTION_INIT sporoči prevajalniku, naj ime izjeme poveže s številko napake Oracle, kot smo že omenili. Omogoča vam, da se na katero koli notranjo izjemo sklicujete z imenom in zanjo napišete poseben upravljavec. Ko vidite sklad napak ali zaporedje sporočil o napakah, je tisto na vrhu tisto, ki ga je mogoče ujeti in obdelati.

Nadaljujemo v tem članku o obravnavi izjem v PL / SQL, da bomo razumeli, kako uporabiti metodo RAISE_APPLICATION_ERROR.

Uporaba metode RAISE_APPLICATION_ERROR

Gre za postopek, ki je vgrajen s programsko opremo oracle. S tem postopkom lahko številko napake povežemo s sporočilom o napaki po meri. Če združite številko napake in sporočilo o napaki po meri, lahko sestavite niz napake, ki je podoben privzetim nizom napak, ki jih prikaže Oracle, ko naleti na napako. Postopek RAISE_APPLICATION_ERROR najdete v paketu DBMS_STANDARD

Sintaksa

error_application_error (številka_napake, sporočilo [, TRUE])

Primer

/ * Ustvari se sprožilec trg_emp_detail_chk. * / USTVARI ALI ZAMENJAJ TRIGGER trg_emp_detail_chk / * Čas sprožilca je v tabeli ZAPOSLENI razglašen kot PRED UPDATE. * / Pred UPDATE ON uslužbenci IZJAVLJAJO dovoljenje_odločeno EXCEPTION BEGIN / * Začetek IF OF dan sistemskega časa je bodisi sobota ali nedelja ali ne. * / ČE obrezovanje (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN rise_application_error (-20000, 'Nimate dovoljenja za to kakršna koli sprememba ob vikendih !! ') / * Postopek rise_application_error se pokliče s prvo vrednostjo parametra kot -20000, drugi pa s privzetim besedilom, ki navaja, da uporabnik ni pooblaščen za kakršno koli spreminjanje ob vikendih. * / END IF END

S tem smo prišli do konca tega članka o »Obravnavanju izjem v PL / SQL«. Upam, da je ta tema dobro razumljena in vam je pomagala. Poskusite napisati lastne kode in vključite metode, razložene v tem članku.

Če se želite izučiti pri tej tehnologiji pri strokovnjakih, se lahko odločite za strukturirano usposabljanje pri edureki! Oglejte si to Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, ki se širijo po vsem svetu. Ta tečaj vas usposobi za osnovne koncepte in napredna orodja in tehnike za upravljanje podatkov in upravljanje zbirke podatkov MySQL. Vključuje praktično učenje konceptov, kot so MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command Line, MySQL Functions itd. Po koncu usposabljanja boste lahko ustvarili in upravljali svojo MySQL bazo podatkov in upravljali podatkov.

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega članka »Obravnava izjem v PL / SQL«, da se vam bomo javili v najkrajšem možnem času.