Č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.
Spodaj 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_NULL | 06530 | -6530 | Zviša se, ko ničnemu predmetu samodejno dodeli vrednost. |
CASE_NOT_FOUND | 06592 | -6592 | Poviša se, če nobena od možnosti v klavzuli WHEN v a Izjava CASE in ni nobenega stavka ELSE. |
COLLECTION_IS_NULL | 06531 | -6531 | Poviš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_INDEX | 00001 | -Eno | Poviša se, ko se poskušajo podvojene vrednosti shraniti v stolpec z edinstvenim indeksom. |
INVALID_CURSOR | 01001 | -1001 | Poviša se, ko poskušate narediti kurzor, ki ni dovoljen, na primer zapiranje neodprtega kurzorja. |
INVALID_NUMBER | 01722 | -1722 | Poviša se, če pretvorba niza znakov v število ne uspe, ker niz ne predstavlja veljavne številke. |
LOGIN_DENIED | 01017 | -1017 | Poviša se, ko se program poskuša prijaviti v bazo podatkov z neveljavnim uporabniškim imenom ali geslom. |
NO_DATA_FOUND | 01403 | +100 | Poviša se, ko stavek SELECT INTO ne vrne nobene vrstice. |
NOT_LOGGED_ON | 01012 | -1012 | Poviša se, ko je klic baze podatkov izdan, ne da bi bil povezan z bazo podatkov. |
PROGRAM_ERROR | 06501 | -6501 | Poviša se, če ima PL / SQL notranji problem. |
ROWTYPE_MISMATCH | 06504 | -6504 | Zviša se, ko kazalec pridobi vrednost v spremenljivki z nezdružljivim podatkovnim tipom. |
SELF_IS_NULL | 30625 | -30625 | Zviša se, ko se prikliče metoda člana, vendar primerek vrste predmeta ni bil inicializiran. |
STORAGE_ERROR | 06500 | -6500 | Poviša se, ko PL / SQL zmanjka pomnilnika ali če je pomnilnik pokvarjen. |
TOO_MANY_ROWS | 01422 | -1422 | Poviša se, ko stavek SELECT INTO vrne več kot eno vrstico. |
VALUE_ERROR | 06502 | -6502 | Poviša se, ko pride do napake v aritmetični, pretvorbeni, okrnjeni ali velikostni omejitvi. |
ZERO_DIVIDE | 01476 | 1476 | Dvigne 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.