Uzziniet, kā rīkoties ar izņēmumiem PL / SQL



Šis raksts ir visaptverošs ceļvedis par to, kā veikt izņēmumu apstrādi PL / SQL, apspriežot dažādus PL / SQL piedāvātos izņēmumu veidus.

Ja esat programmētājs, jūs, iespējams, esat iepazinies ar izņēmumu apstrādes jēdzienu, kas ir neatņemama tā sastāvdaļa . Tā kā kļūdas ir neizbēgamas un pat gudrākais no mums var kļūdīties, rakstot kodu, mums ir jāiepazīstas, kā ar tām rīkoties. Šajā rakstā mēs īpaši uzzināsim par izņēmumu apstrādi PL / SQL.

SQL izņēmumu apstrāde PL / SQL-EdurekaTālāk ir norādītas šajā rakstā aplūkotās tēmas:





Kas ir izņēmums?

Jebkurš nenormāls stāvoklis vai notikums, kas pārtrauc normālu mūsu programmas instrukciju plūsmu izpildes laikā vai vienkāršiem vārdiem, izņēmums ir kļūda.

Izņēmumu apstrādes sintakse PL / SQL

DEKLARĒT SĀKUMA SĀKUMU KAD izņēmums1 TAD izņēmums1-apstrādes paziņojumi KAD izņēmums2 TAD izņēmums2-apstrādes paziņojumi KAD izņēmums3 TAD izņēmums3-apstrādes paziņojumi ........ KAD citi TAD izņēmums3-apstrādes paziņojumi BEIGAS

Šeit mēs varam uzskaitīt tik daudz izņēmumu, cik mēs vēlamies apstrādāt. Noklusējuma izņēmums tiks lietots, “WHEN others THEN”



Izņēmumu apstrādes piemērs PL / SQL

Zemāk esošajā programmā tiek parādīts tā studenta vārds un adrese, kura ID ir norādīts. Tā kā mūsu datu bāzē nav neviena studenta ar ID vērtību 8, programma paaugstina izpildes laika izņēmumu NO_DATA_FOUND, kas tiek uzņemts blokā EXCEPTION.

DECLARE s_id studentS.id% type: = 8 s_name studentsS.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 ('Nosaukums:' || s_name) DBMS_OUTPUT .PUT_LINE ('Atrašanās vieta:' || s_loc) IZŅĒMUMS TAD, kad no_data_found THEN dbms_output.put_line ('Nav šāda studenta!'), KAD TUR Citi TAD dbms_output.put_line ('Hmm, kļūda!') BEIGAS

Rezultāts

Nav tāda studenta! PL / SQL procedūra ir veiksmīgi pabeigta.

Šeit mēs varam uzskaitīt tik daudz izņēmumu, cik mēs vēlamies apstrādāt. Noklusējuma izņēmums tiks apstrādāts, izmantojot KAD citi TAD '

PL / SQL izņēmumu veidi

  • Sistēma definēta
  • Lietotājs izaicināja

Nākamais šajā rakstā par izņēmumu apstrādi PL / SQL , ļaujiet mums detalizēti apspriest abus šos veidus.



Sistēma definēta

Šos izņēmumus, ko netieši nosaka un uztur Oracle serveris, galvenokārt nosaka Oracle Standard Package. Ikreiz, kad izņēmums notiek programmas iekšienē, Oracle serveris sakrīt un identificē atbilstošo izņēmumu no Oracle standarta pakotnē pieejamo izņēmumu kopas. Būtībā šie izņēmumi ir iepriekš definēti PL / SQL kas tiek pacelts KAD tiek pārkāpts konkrētais datu bāzes noteikums .

The Sistēmas noteikti izņēmumi tālāk iedala divās kategorijās:

  • Nosauktie sistēmas izņēmumi
  • Bez nosaukuma sistēmas izņēmumi

Nosauktās sistēmas izņēmumi

Nosauktie PL / SQL izņēmumi ir nosaukts PL / SQL standarta paketē , tāpēc izstrādātājam nav jānosaka PL / SQL izņēmumi savā kodā. PL / SQL nodrošina daudzus iepriekš definētus izņēmumus, kas tiek izpildīti, ja programma pārkāpj jebkuru datu bāzes kārtulu. Šajā tabulā ir uzskaitīti daži svarīgi iepriekš definēti izņēmumi un mīnus

Izņēmums Oracle kļūda SQLCODE Apraksts
ACCESS_INTO_NULL06530-6530Tas tiek pacelts, kad nulles objektam tiek automātiski piešķirta vērtība.
CASE_NOT_FOUND06592-6592Tas tiek izvirzīts, ja neviena no izvēles iespējām WHEN klauzulā a CASE paziņojums ir atlasīts, un ELSE klauzulas nav.
COLLECTION_IS_NULL06531-6531Tas tiek izcelts, ja programma mēģina neinicializētai ligzdotai tabulai vai attēlam izmantot citas kolekcijas metodes, nevis EXISTS, vai programma mēģina piešķirt vērtības neinicializētas ligzdotas tabulas vai varray elementiem.
DUP_VAL_ON_INDEX00001-viensTas tiek pacelts, mēģinot saglabāt vērtību dublikātus kolonnā ar unikālu indeksu.
INVALID_CURSOR01001-1001Tas tiek pacelts, kad tiek mēģināts veikt neatļautu kursora darbību, piemēram, aizvērt neatvērtu kursoru.
INVALID_NUMBER01722-1722Tas tiek pacelts, ja rakstzīmju virknes pārveidošana par numuru neizdodas, jo virkne neatspoguļo derīgu skaitli.
LOGIN_DENIED01017-1017Tas tiek izvirzīts, kad programma mēģina pieteikties datu bāzē ar nederīgu lietotājvārdu vai paroli.
NO_DATA_FOUND01403+100Tas tiek pacelts, kad SELECT INTO priekšraksts neatgriež rindas.
NOT_LOGGED_ON01012-1012Tas tiek pacelts, kad tiek veikts datu bāzes izsaukums bez savienojuma ar datu bāzi.
PROGRAM_ERROR06501-6501Tas tiek izvirzīts, kad PL / SQL ir iekšēja problēma.
ROWTYPE_MISMATCH06504-6504Tas tiek pacelts, kad kursors ienes vērtību mainīgajam ar nesaderīgu datu tipu.
SELF_IS_NULL30625-30625Tas tiek pacelts, kad tiek izsaukta dalībnieka metode, bet objekta tipa instance netika inicializēta.
STORAGE_ERROR06500-6500Tas tiek pacelts, kad PL / SQL atmiņa ir beigusies vai atmiņa ir bojāta.
TOO_MANY_ROWS01422-1422Tas tiek pacelts, kad SELECT INTO priekšraksts atgriež vairāk nekā vienu rindu.
VALUE_ERROR06502-6502Tas tiek pacelts, ja rodas aritmētiskās, konversijas, saīsināšanas vai lieluma ierobežojuma kļūda.
ZERO_DIVIDE014761476Tas tiek pacelts, kad skaitli mēģina dalīt ar nulli.

Piemērs

IZVEIDOT VAI NOMAINĪT PROCEDŪRU add_new_student (students _id_in NUMBER, students _name_in VARCHAR2) SĀK UZSKATĪT studentu (students _id, studenta _name) VĒRTĪBAS (studenta _id_in, studenta _name_in) IZŅEMŠANA, KAD DUP_VAL_ON_INDEX1 atkārtot ) KAD CITI TAD paaugstina_aplikācijas_kļūda (-20002, 'Radās kļūda.') BEIGT

Turpinot šo rakstu par izņēmumu apstrādi PL / SQL, ļaujiet mums saprast, kas ir nenosaukti sistēmas izņēmumi.

Bez nosaukuma sistēmas izņēmumi

Sistēmas izņēmumi, kuriem Oracle nav nosaukuma, tiek saukti par nenosauktiem sistēmas izņēmumiem. Šie izņēmumi nenotiek bieži, un tie tiek rakstīti ar kodu un saistīto ziņojumu.

Būtībā ir divi veidi, kā rīkoties ar nenosauktiem sistēmas izņēmumiem:

1. Izmantojot izņēmumu apstrādātāju WHEN OTHERS

2. Izņēmuma koda saistīšana ar nosaukumu un tā izmantošana kā nosaukts izņēmums.

Daži nenosauktu sistēmas izņēmumu gadījumi ir šādi:

  • Paaugstiniet tos netieši.
  • Gadījumā, ja ar tiem netiek galā “WHEN Others”, tad ar tiem ir jārīkojas skaidri.
  • Lai skaidri rīkotos ar izņēmumu, tos var deklarēt, izmantojot Pragma EXCEPTION_INIT, un tos var apstrādāt, izņēmumu sadaļā atsaucoties uz lietotāja definēto izņēmuma nosaukumu.

Neminētu izņēmumu apstrādes piemērs, izmantojot Pragma EXCEPTION_INIT, ir sniegts vēlāk rakstā. Turpinot šo rakstu par izņēmumu apstrādi PL / SQL, ļaujiet mums saprast lietotāja definētos izņēmumus.

Lietotājs definēts

Tāpat kā visas pārējās programmēšanas valodas, arī Oracle ļauj jums paziņot, ka reklāmā tiek ieviesti paši izņēmumi. Atšķirībā no sistēmas definētiem izņēmumiem, šie izņēmumi ir skaidri izvirzīti PL / SQL blokā.

Darbības, lai paziņotu lietotāja definētus izņēmumus Oracle datu bāzē

Mēs varam definēt lietotāja definētus izņēmumus Oracle datu bāzē šādos 3 veidos:

  • Izmantojot mainīgo EXCEPTION tipu

Šeit mēs varam pasludināt lietotāja definētu izņēmumu, deklarējot mainīgo EXCEPTION datu tips mūsu kodā un skaidri izvirziet to savā programmā, izmantojot RAISE paziņojumu.

  • Izmantojot funkciju PRAGMA EXCEPTION_INIT

Mēs varam definēt iepriekš nenoteiktu kļūdas numuru ar mainīgo EXCEPTION datu tipu

  • Izmantojot metodi RAISE_APPLICATION_ERROR

Izmantojot šo metodi, mēs varam deklarēt lietotāja definētu izņēmumu ar savu pielāgoto kļūdas numuru un ziņojumu.

Līdz šim jūs, iespējams, esat guvis aptuvenu priekšstatu par veidiem, kā mēs varam paaugstināt lietotāja definētus izņēmumus PL / SQL. Mēs uzzināsim par katru no iepriekšminētajām metodēm ar tālāk sniegtajiem piemēriem šajā rakstā par izņēmumu apstrādi PL / SQL.

Tālāk šajā rakstā turpināsim demonstrēt lietotāja definētu izņēmumu apstrādi.

Lietotāja definētu izņēmumu demonstrēšana

Turpinot šo rakstu par izņēmumu apstrādi PL / SQL, ļaujiet mums saprast, kā izmantot EXCEPTION tipa mainīgo.

Izmantojot mainīgo EXCEPTION tipu

Lietotāja definēta izņēmuma deklarēšanas process ir sadalīts trīs daļās, un šīs 3 daļas ir:

  • Deklarēt mainīgā izņēmuma datu tipu
  • Paaugstiniet izņēmumu
  • Rīkojieties ar izņēmumu

Uzrakstīsim kodu, lai detalizēti parādītu iepriekš minētās darbības.

DEKLARĒT var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Iepriekš minētajā deklarācijas blokā mums ir četri mainīgie, starp kuriem pirmie trīs ir normālu skaitļu datu tipu mainīgie, bet ceturtais, kas ir ex_DivZero, ir īpašs izņēmuma datu tipa mainīgais. Ceturtais ir mūsu lietotāja definēts izņēmums.

DEKLARĒT var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Iepriekš minētā šī anonīmā bloka izpildes daļa darbosies tikai tad, kad dalītājs ir 0. Ja dalītājs ir nulle, kā tas ir mūsu gadījumā, kļūda tiks paaugstināta un programmas vadība izlaidīs visas nākamās darbības un meklēs atbilstošu izņēmumu apstrādātāju. Gadījumā, ja tiek atrasts kāds cits, tas attiecīgi veiks darbību, pretējā gadījumā tas vai nu pārtrauks programmu, vai arī mūs pamudinās ar neapstrādātu sistēmas definētu kļūdu.

IZŅEMŠANA, KAD ex_DivZero TAD DBMS_OUTPUT.PUT_LINE (‘KĻŪDA, dalītājs nevar būt nulle’)

Šis izņēmumu apstrādātājs. Tiklīdz lietotājs ievadīs dalītāju kā 0, tiks parādīta iepriekšēja ziņojuma virkne.

Galīgais kods:

kārtot masīvu c ++ dilstošā secībā
DEKLARĒT var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT_Paredzēt_Paredzēt_Paredzēt_palīdzību = 0 TAD Paaugstināt ex-DivZero END IF Var_rezultāts: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Rezultāts =' || var_rezultāts) BEIGT

Turpinot šo rakstu par izņēmumu apstrādi PL / SQL, ļaujiet mums saprast, kā izmantot metodi PRAGMA_EXCEPTION_INIT.

Izmantojot funkciju PRAGMA EXCEPTION_INIT

Iekš Funkcija PRAGMA EXCEPTION_INIT, izņēmuma nosaukums ir saistīts ar Oracle kļūdas numuru. Šo nosaukumu var izmantot, izstrādājot kļūdas izņēmumu apstrādātāju.Milzīgiem projektiem ar daudzām lietotāja definētām kļūdām PRAGMA EXCEPTION_INIT ir visnoderīgākā un piemērotākā metode.

Sintakse:

PRAGMA EXCEPTION_INIT (izņēmuma_nosaukums, -Oracle_error_number)

Piemērs

DECLARE strupceļš_detektēts IZŅĒMUMS PRAGMA EXCEPTION_INIT (strupceļš_atklāts, -60) BEGIN NULL - Dažas darbības, kas izraisa ORA-00060 kļūdu IZŅEMŠANA WHEN deadlock_detected THEN NULL - rīkojieties ar kļūdu END

PRAGMA EXCEPTION_INIT liek kompilatoram saistīt izņēmuma nosaukumu ar Oracle kļūdas numuru, kā minēts iepriekš. Tas ļauj jums atsaukties uz jebkuru iekšēju izņēmumu pēc nosaukuma un uzrakstīt tam īpašu apstrādātāju. Kad redzat kļūdu kaudzīti vai kļūdu ziņojumu secību, augšdaļā redzamo ir iespējams ieslodzīt un apstrādāt.

Pārejot šajā rakstā par izņēmumu apstrādi PL / SQL, ļaujiet mums saprast, kā izmantot metodi RAISE_APPLICATION_ERROR.

Izmantojot metodi RAISE_APPLICATION_ERROR

Tā ir procedūra, kas ir iebūvēta kopā ar Oracle programmatūru. Izmantojot šo procedūru, mēs varam saistīt kļūdas numuru ar pielāgotu kļūdas ziņojumu. Apvienojot gan kļūdas numuru, gan pielāgoto kļūdas ziņojumu, var izveidot kļūdas virkni, kas izskatās līdzīga tām noklusējuma kļūdu virknēm, kuras Oracle parāda, kad rodas kļūda. RAISE_APPLICATION_ERROR procedūra ir atrodama DBMS_STANDARD pakotnē

Sintakse

rais_application_error (kļūdas_numurs, ziņojums [, TRUE])

Piemērs

/ * Tiek izveidots trigeris trg_emp_detail_chk. * / IZVEIDOT VAI NOMAINIET TRIGGERU trg_emp_detail_chk / * Sprūda laiks tiek deklarēts kā PIRMS ATJAUNINĀJUMA tabulā DARBINIEKI. * / Pirms UPDATE ON DECLARE Sistēmas laika diena ir vai nu sestdiena, vai svētdiena, vai nav. * / IF apgriešana (TO_CHAR (sysdate, 'Day')) IN ('Sestdiena', 'Svētdiena') TAD rais_application_error (-20000, 'Jums nav atļauts to darīt jebkuras izmaiņas nedēļas nogalēs !! ') / * Procedūra rais_application_error tiek izsaukta ar pirmā parametra vērtību kā -20000, bet otrais parametrs ar noklusējuma tekstu, kas norāda, ka lietotājam nav atļauts veikt izmaiņas nedēļas nogalēs. * / BEIGT, JA BEIGS

Ar to mēs esam nonākuši šī raksta beigās “Izņēmumu apstrāde PL / SQL”. Es ceru, ka šī tēma ir labi izprotama un jums palīdzēja. Mēģiniet rakstīt savus kodus un iekļaut metodes, kas paskaidrotas šajā rakstā.

Ja vēlaties apmācīt profesionāļus par šo tehnoloģiju, varat izvēlēties strukturētu apmācību no edureka! Pārbaudiet to Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Šis kurss apmācīs jūs par galvenajiem jēdzieniem un uzlabotajiem rīkiem un paņēmieniem, kā pārvaldīt datus un administrēt MySQL datu bāzi. Tas ietver praktisku mācīšanos par tādiem jēdzieniem kā MySQL Workbench, MySQL Server, datu modelēšana, MySQL savienotājs, datu bāzes noformēšana, MySQL komandrinda, MySQL funkcijas utt. Apmācības beigās jūs varēsiet izveidot un administrēt savu MySQL datu bāzi un pārvaldīt dati.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī raksta “Izņēmumu apstrāde PL / SQL” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.