Sužinokite, kaip tvarkyti PL / SQL išimtis



Šis straipsnis yra išsamus vadovas, kaip atlikti išimčių tvarkymą PL / SQL, aptariant įvairių rūšių išimtis, siūlomas PL / SQL.

Jei esate programuotojas, jums gali būti žinoma, kad išimčių tvarkymas yra neatsiejama jų dalis . Kadangi klaidų neišvengiama ir net patys protingiausi iš mūsų gali padaryti klaidų rašydami kodą, turime būti susipažinę, kaip su jomis elgtis. Šiame straipsnyje mes ypač sužinosime apie išimčių tvarkymą PL / SQL.

SQL išimčių tvarkymas PL / SQL-EdurekaToliau pateikiamos šio straipsnio temos:





Kas yra išimtis?

Bet kokia nenormali būklė ar įvykis, nutraukiantis įprastą mūsų programos instrukcijų eigą vykdymo metu, arba paprastais žodžiais, išimtis yra klaida.

Išimčių tvarkymo PL / SQL sintaksė

PASKELBKITE PRADĖTI IŠIMTĮ, kai išimtis1 TAD išimtis1-tvarkymo pareiškimai KADA išimtis2 TAD išimtis2-tvarkymo teiginiai KAD išimtis3 TAD išimtis3-tvarkymo pareiškimai ...

Čia galime išvardyti tiek išimčių, kiek norime tvarkyti. Numatytoji išimtis bus tvarkoma naudojant „WHEN others THEN“



Išimčių tvarkymo PL / SQL pavyzdys

Žemiau esančioje programoje rodomas studento, kurio ID yra nurodytas, vardas ir adresas. Kadangi mūsų duomenų bazėje nėra studento, kurio ID vertė 8, programa iškelia vykdymo laiko išimtį NO_DATA_FOUND, kuri užfiksuota bloke 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 studentai WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Vardas:' || s_name) DBMS_OUTPUT .PUT_LINE ('Vieta:' || s_loc) IŠIMTIS KAI NĖRA_aduomenų_rasta TAD dbms_output.put_line ('Nėra tokio studento!') KADA KITI TAD TAD dbms_output.put_line ('Oi, klaida!') PABAIGA

Rezultatas

Nėra tokio studento! PL / SQL procedūra sėkmingai baigta.

Čia galime išvardyti tiek išimčių, kiek norime tvarkyti. Numatytoji išimtis bus tvarkoma naudojant „ KAI kiti TADA '

PL / SQL išimčių tipai

  • Apibrėžta sistema
  • Vartotojas nepaisė

Kitas šiame straipsnyje apie išimčių tvarkymą PL / SQL , išsamiai aptarkime abu šiuos tipus.



Apibrėžta sistema

Netiesiogiai „Oracle“ serverio apibrėžtos ir prižiūrimos šios išimtys daugiausia apibrėžtos „Oracle“ standartiniame pakete. Kai tik programoje atsiranda išimtis, „Oracle“ serveris suderina ir nustato tinkamą išimtį iš turimų „Oracle“ standartiniame pakete esančių išimčių rinkinio. Iš esmės šios išimtys yra iš anksto apibrėžtos PL / SQL kuris pakyla KAI pažeidžiama konkreti duomenų bazės taisyklė .

The Sistemos apibrėžtos išimtys toliau skirstomos į dvi kategorijas:

  • Pavadintos sistemos išimtys
  • Neįvardytos sistemos išimtys

Pavadintos sistemos išimtys

Pavadintos PL / SQL išimtys yra pavadintas standartiniame PL / SQL pakete , todėl kūrėjui nereikia apibrėžti PL / SQL išimčių savo kode. PL / SQL pateikia daug iš anksto apibrėžtų išimčių, kurios vykdomos, kai programa pažeidžia bet kurią duomenų bazės taisyklę. Šioje lentelėje pateikiamos kelios svarbios iš anksto nustatytos išimtys ir minusai

Išimtis „Oracle“ klaida SQLCODE apibūdinimas
ACCESS_INTO_NULL06530-6530Jis pakeliamas, kai nuliui objektui automatiškai priskiriama reikšmė.
CASE_NOT_FOUND06592-6592Jis iškeliamas, kai nė vienas iš WHEN punkte nurodytų pasirinkimų a CASE pareiškimas yra pasirinktas ir nėra jokios kitos sąlygos.
COLLECTION_IS_NULL06531-6531Jis iškyla, kai programa bando taikyti neinicijuotai įdėtai lentelei ar atvaizdui rinkimo metodus, išskyrus EXISTS, arba programa bando priskirti reikšmes neinicijuotos įdėtos lentelės ar varray elementams.
DUP_VAL_ON_INDEX00001-vienasJis iškyla, kai pasikartojančias reikšmes bandoma laikyti stulpelyje su unikaliu indeksu.
INVALID_CURSOR01001-1001Jis iškyla, kai bandoma atlikti neleistiną žymeklio operaciją, pavyzdžiui, uždaryti neatidarytą žymeklį.
INVALID_NUMBER01722-1722Jis iškyla, kai nepavyksta paversti simbolių eilutės skaičiumi, nes eilutė nėra galiojantis skaičius.
LOGIN_DENIED01017-1017Jis iškyla, kai programa bando prisijungti prie duomenų bazės naudodama neteisingą vartotojo vardą ar slaptažodį.
NO_DATA_FOUND01403+100Jis pakeliamas, kai SELECT INTO sakinys negrąžina eilučių.
NOT_LOGGED_ON01012-1012Jis iškyla, kai iškviečiamas duomenų bazės iškvietimas neprisijungus prie duomenų bazės.
PROGRAM_ERROR06501-6501Jis iškyla, kai PL / SQL turi vidinę problemą.
ROWTYPE_MISMATCH06504-6504Jis iškyla, kai žymeklis gauna reikšmę kintamajame, kurio duomenų tipas yra nesuderinamas.
SELF_IS_NULL30625-30625Jis iškeltas, kai iškviečiamas nario metodas, tačiau objekto tipo egzempliorius nebuvo inicijuotas.
STORAGE_ERROR06500-6500Jis iškyla, kai baigėsi PL / SQL atmintis arba atmintis buvo sugadinta.
TOO_MANY_ROWS01422-1422Jis pakeliamas, kai SELECT INTO sakinys grąžina daugiau nei vieną eilutę.
VALUE_ERROR06502-6502Jis iškeltas, kai įvyksta aritmetinė, konversijos, sutrumpinimo ar dydžio suvaržymo klaida.
ZERO_DIVIDE014761476 mJis keliamas, kai bandoma skaičių padalinti iš nulio.

Pavyzdys

SUKURTI ARBA PAKEISTI PROCEDŪRĄ add_new_student (studentas _id_in NUMERYJE, studentas _name_in VARCHAR2) PRADĖJA ĮTERPTI studentą (studentas _id, studento_vardas) VERTYBES (studento _id_in, studento_name_in) IŠIMTIS, KAI DUP_VAL_ON_INDEX1 THER pakelti ) KAI KITI TADA kelia_paskyrimo_klaida (-20002, „Įvyko klaida.“) PABAIGA

Toliau šiame straipsnyje apie išimčių tvarkymą PL / SQL supraskime, kas yra neįvardytos sistemos išimtys.

Neįvardytos sistemos išimtys

Sistemos išimtys, kurioms „Oracle“ neturi pavadinimo, vadinamos neįvardintomis sistemos išimtimis. Šios išimtys pasitaiko nedažnai ir yra rašomos su kodu ir susijusiu pranešimu.

Iš esmės yra du būdai, kaip tvarkyti neįvardytas sistemos išimtis:

1. Naudodamiesi išimčių tvarkymo priemone WHEN OTHERS

2. Išimties kodo susiejimas su pavadinimu ir naudojimas kaip pavadinta išimtis.

skaitytuvo klasės naudojimas java

Kai kurie neįvardytų sistemos išimčių veiksmai yra šie:

  • Kelkite juos netiesiogiai.
  • Jei tada jie nėra tvarkomi „KAD KITI“, jie turi būti tvarkomi aiškiai.
  • Norint aiškiai valdyti išimtį, jas galima deklaruoti naudojant „Pragma EXCEPTION_INIT“ ir tvarkyti nurodant vartotojo apibrėžtą išimties pavadinimą išimčių skyriuje.

Neįvardytų išimčių tvarkymo naudojant „Pragma EXCEPTION_INIT“ pavyzdys pateikiamas vėliau straipsnyje. Toliau šiame straipsnyje apie išimčių tvarkymą PL / SQL, supraskime vartotojo apibrėžtas išimtis.

Vartotojo apibrėžta

Kaip ir visos kitos programavimo kalbos, „Oracle“ taip pat leidžia skelbti, kad jūsų skelbimas įgyvendina savo išimtis. Skirtingai nuo sistemos apibrėžtų išimčių, šios išimtys yra aiškiai iškeltos PL / SQL bloke.

Veiksmai, skirti paskelbti vartotojo apibrėžtas išimtis „Oracle“ duomenų bazėje

Vartotojo apibrėžtas išimtis „Oracle“ duomenų bazėje galime apibrėžti šiais 3 būdais:

  • Naudojant kintamąjį EXCEPTION tipą

Čia mes galime paskelbti vartotojo apibrėžtą išimtį, deklaruodami kintamąjį EXCEPTION duomenų tipas mūsų kode ir aiškiai jį pakelkite savo programoje naudodami RAISE teiginį.

  • Naudojant funkciją PRAGMA EXCEPTION_INIT

Neapibrėžtą klaidos numerį galime apibrėžti pagal duomenų tipo EXCEPTION kintamąjį

  • Naudojant RAISE_APPLICATION_ERROR metodą

Naudodami šį metodą galime paskelbti vartotojo apibrėžtą išimtį su savo pritaikytu klaidos numeriu ir pranešimu.

Iki šiol jūs turėjote apytikslę idėją apie būdus, kuriais galime padidinti vartotojo apibrėžtas išimtis PL / SQL. Sužinosime apie kiekvieną iš pirmiau minėtų metodų su toliau pateiktais pavyzdžiais apie išimčių tvarkymą PL / SQL.

Toliau šiame straipsnyje tęskime vartotojo apibrėžtų išimčių tvarkymo demonstracijas.

Vartotojo apibrėžtų išimčių demonstravimas

Toliau šiame straipsnyje apie išimčių tvarkymą PL / SQL supraskime, kaip naudoti kintamąjį EXCEPTION.

Naudojant kintamąjį EXCEPTION tipą

Vartotojo apibrėžtos išimties deklaravimo procesas yra padalintas į tris dalis ir šios 3 dalys yra:

  • Paskelbkite kintamojo išimties duomenų tipą
  • Pakelkite išimtį
  • Tvarkykite išimtį

Parašykime kodą, kad išsamiai parodytume aukščiau nurodytus veiksmus.

DEKLARUOTI var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Pirmiau pateiktame deklaracijos bloke turime keturis kintamuosius, tarp kurių pirmieji trys yra įprasto skaičiaus duomenų tipo kintamieji, o ketvirtasis, kuris yra ex_DivZero, yra specialus išimties duomenų tipo kintamasis. Ketvirtoji yra vartotojo apibrėžta išimtis.

DEKLARUOTI var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Minėta šio anoniminio bloko vykdymo dalis veiks tik tada, kai daliklis bus 0. Jei daliklis yra lygus nuliui, kaip yra mūsų atveju, klaida bus iškelta ir programos valdymas praleis visus kitus veiksmus ir ieškos atitinkančio išimčių tvarkytuvo. Tuo atveju, jei randa bet kurį kitą, jis atitinkamai atliks veiksmą, kitaip jis arba nutraukia programą, arba paragins mus su neapdorota sistemos apibrėžta klaida.

IŠIMTIS, KAI ex_DivZero TAD DBMS_OUTPUT.PUT_LINE („KLAIDA, daliklis negali būti lygus nuliui“)

Tai išimčių tvarkytojas. Kai tik vartotojas įveda daliklį kaip 0, bus paraginta aukščiau nurodyta pranešimo eilutė.

Galutinis kodas:

PASKELBKITE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero IŠIMTIS PRADŽIA, JEI var_divisor = 0 THEN RAISE ex-DivZero END IF Var_rezultatas: = var_dividend / var_divisor DBMS_OUTPUT_Pasaulio_pask. = 0 Tuomet pakelkite ex-DivZero END, jei Var_rezultatas: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Rezultatas =' || var_rezultatas) PABAIGA

Šiame straipsnyje apie išimčių tvarkymą PL / SQL, leiskite mums suprasti, kaip naudoti PRAGMA_EXCEPTION_INIT metodą.

Naudojant funkciją PRAGMA EXCEPTION_INIT

Viduje Funkcija PRAGMA EXCEPTION_INIT, išimties pavadinimas susietas su „Oracle“ klaidos numeriu. Šis vardas gali būti naudojamas kuriant klaidos išimčių tvarkytuvą.Didžiuliams projektams, kuriuose yra daug vartotojo apibrėžtų klaidų, PRAGMA EXCEPTION_INIT yra pats naudingiausias ir tinkamiausias metodas.

Sintaksė:

PRAGMA EXCEPTION_INIT (išimties_pavadinimas, -Oracle_error_number)

Pavyzdys

PASKELBKITE aklavietę_tikrinta PRIIMTI PRAGMA EXCEPTION_INIT (aklavietė_detektuota, -60) BEGIN NULL - tam tikra operacija, kuri sukelia ORA-00060 klaidą IŠIMTIS KAI aklavietė aptikta TAD NULL - tvarkykite klaidą PABAIGA

PRAGMA EXCEPTION_INIT nurodo kompiliatoriui susieti išimties pavadinimą su „Oracle“ klaidos numeriu, kaip minėta anksčiau. Tai leidžia jums nurodyti bet kokią vidinę išimtį pavadinimu ir parašyti jai konkretų tvarkytuvą. Kai matote klaidų rinkinį arba klaidų pranešimų seką, viršuje pateiktas yra tas, kurį galima įstrigti ir tvarkyti.

Toliau pereidami šiame straipsnyje apie išimčių tvarkymą PL / SQL, supraskime, kaip naudoti RAISE_APPLICATION_ERROR metodą.

Naudojant RAISE_APPLICATION_ERROR metodą

Tai procedūra, įdiegta kartu su „Oracle“ programine įranga. Naudodami šią procedūrą klaidos numerį galime susieti su pasirinktiniu klaidos pranešimu. Sujungus klaidos numerį ir pasirinktinį klaidos pranešimą, gali būti sudaryta klaidos eilutė, panaši į numatytąsias klaidų eilutes, kurias rodo „Oracle“, kai įvyksta klaida. RAISE_APPLICATION_ERROR procedūra randama DBMS_STANDARD pakete

ką daro jatras

Sintaksė

raise_application_error (klaidos numeris, pranešimas [, TRUE])

Pavyzdys

/ * Sukuriamas aktyviklis „trg_emp_detail_chk“. * / SUKURKITE ARBA PAKEISKITE „TRGGER“ trg_emp_detail_chk / * Trigerio laikas lentelėje DARBUOTOJAI deklaruojamas kaip PRIEŠ ATNAUJINTI *. sistemos laiko diena yra šeštadienis, sekmadienis arba ne. * / IF apdaila (TO_CHAR (sysdate, 'diena')) IN ('šeštadienis', 'sekmadienis') TADA raise_application_error (-20000, 'Jūs neturite teisės tai padaryti bet kokie pakeitimai savaitgaliais !! ') / * Procedūra „raise_application_error“ iškviečiama, kai pirmojo parametro reikšmė yra –20000, o antrojo parametro reikšmė yra numatytasis, nurodantis, kad vartotojas neturi teisės atlikti jokių pakeitimų savaitgaliais. * / Pabaiga, jei baigsis

Tuo mes baigėme šį straipsnį „Išimčių tvarkymas PL / SQL“. Tikiuosi, kad ši tema yra gerai suprantama ir jums padėjo. Pabandykite parašyti savo kodus ir įtraukti šiame straipsnyje paaiškintus metodus.

Jei norite mokytis iš profesionalų apie šią technologiją, galite pasirinkti struktūrinį mokymą iš „edureka“! Patikrinkite tai sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. Šis kursas moko jus apie pagrindines sąvokas ir pažangius įrankius bei metodus, kaip valdyti duomenis ir administruoti „MySQL“ duomenų bazę. Tai apima praktinį mokymąsi tokiomis sąvokomis kaip „MySQL Workbench“, „MySQL Server“, duomenų modeliavimas, „MySQL Connector“, duomenų bazių dizainas, „MySQL“ komandų eilutė, „MySQL“ funkcijos ir kt. Treniruotės pabaigoje galėsite sukurti ir administruoti savo „MySQL“ duomenų bazę bei tvarkyti. duomenis.

Turite mums klausimą? Prašau tai paminėti šio straipsnio „Išimčių tvarkymas PL / SQL“ komentarų skyriuje ir mes kuo greičiau susisieksime.