Siit saate teada, kuidas käsitleda erandeid PL / SQL-is



See artikkel on põhjalik juhend selle kohta, kuidas teha erandeid PL / SQL-is, arutades PL / SQL-i pakutavate eranditüüpide üle.

Kui olete programmeerija, võite olla tuttav erandite käsitlemise mõistega, mis on selle lahutamatu osa . Kuna vead on paratamatud ja isegi kõige targemad meist võivad koodi kirjutades vigu teha, peame olema kursis nende käsitsemisega. Selles artiklis õpime eriti erandite käsitlemist PL / SQL-is.

SQL-erandkäsitlus PL / SQL-EdurekasAllpool on siin artiklis käsitletud teemad:





Mis on erand?

Mis tahes ebanormaalne seisund või sündmus, mis katkestab meie programmi juhiste normaalse käigu käitamise ajal või lihtsate sõnadega, on erand viga.

Erandite käsitlemise süntaks PL / SQL-is

DEKLAREERIGE ALUSTADA ERAND, KUI erand1, siis erand1-käitlus-avaldused, kui erand2, siis erand2-käitlus-avaldused, kui erand3, siis erand3, käitlus-avaldused ........ KUI teised, siis erand

Siit saame loetleda nii palju erandeid, kui tahame käsitleda. Vaikimisi tehtavat erandit kasutatakse juhul, kui 'WHEN others THEN'



Näide erandkäsitlusest PL / SQL-is

Allolevas programmis kuvatakse õpilase nimi ja aadress, kelle ID on antud. Kuna meie andmebaasis pole ühtegi õpilast ID-väärtusega 8, tõstab programm käitamisaja erandi NO_DATA_FOUND, mis on jäädvustatud plokis 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 ('Nimi:' || s_name) DBMS_OUTPUT .PUT_LINE ('Asukoht:' || s_loc) ERAND, KUI no_data_found THEN dbms_output.put_line ('Sellist õpilast pole!') KUI teised SIIS dbms_output.put_line ('Vabandust, viga!') LÕPP

Väljund

Sellist õpilast pole! PL / SQL-i protseduur on edukalt lõpule viidud.

Siit saame loetleda nii palju erandeid, kui tahame käsitleda. Vaikimisi tehtavat erandit kasutatakse KUI teised SIIS '

PL / SQL-i erandite tüübid

  • Süsteem on määratletud
  • Kasutaja trotsitud

Järgmine selles artiklis erandite käsitlemise kohta PL / SQL , arutleme üksikasjalikult mõlema nimetatud tüübi üle.



python __init__ meetod

Süsteem on määratletud

Need erandid on määratletud ja kaudselt Oracle'i serveri poolt määratletud peamiselt Oracle'i standardpaketis. Alati, kui programmis tekib erand, sobitub Oracle'i server ja tuvastab sobiva erandi Oracle'i standardpaketis saadaolevate erandite hulgast. Põhimõtteliselt on need erandid eelmääratletud aastal PL / SQL mis tõuseb KUI konkreetset andmebaasi reeglit rikutakse .

The Süsteemi määratletud erandid jagunevad veel kahte kategooriasse:

  • Nimega süsteemi erandid
  • Nimeta süsteemi erandid

Nimega süsteemi erandid

Nimetatud PL / SQL erandid on nimetatud PL / SQL standardpaketis , seega ei pea arendaja oma koodis määratlema PL / SQL-i erandeid. PL / SQL pakub palju eelnevalt määratletud nimega erandeid, mis täidetakse siis, kui programm rikub mõnda andmebaasireeglit. Järgmises tabelis on loetletud mõned olulised eelnevalt määratletud erandid ja miinus

Erand Oracle'i viga SQLCODE Kirjeldus
ACCESS_INTO_NULL06530-6530See tõuseb, kui nullobjektile määratakse automaatselt väärtus.
CASE_NOT_FOUND06592-6592See tõstatub siis, kui ükski WHEN-lause valikutest a CASE avaldus on valitud ja ELSE klauslit pole.
COLLECTION_IS_NULL06531-6531See tõuseb üles siis, kui programm üritab initsialiseerimata sisestatud tabeli või varray abil rakendada muid kui OLEMAS olevaid kogumismeetodeid või kui programm üritab määrata väärtusi initsialiseerimata sisestatud tabeli või varray elementidele.
DUP_VAL_ON_INDEX00001- üksSee tõuseb, kui duplikaatväärtusi üritatakse unikaalse indeksiga veerus säilitada.
INVALID_CURSOR01001-1001See tõuseb üles siis, kui üritatakse teha kursoritoiminguid, mis pole lubatud, näiteks sulgeda avamata kursor.
INVALID_NUMBER01722-1722See tõstetakse üles, kui märgistringi teisendamine numbriks ebaõnnestub, kuna string ei tähenda kehtivat arvu.
LOGIN_DENIED01017-1017See tõuseb üles, kui programm üritab andmebaasi sisse logida vale kasutajanime või parooliga.
ANDMEID EI LEITUD01403+100See tõstetakse, kui SELECT INTO-lause ei tagasta ühtegi rida.
NOT_LOGGED_ON01012-1012See tõuseb üles, kui andmebaasikõne väljastatakse ilma andmebaasiga ühendamata.
PROGRAM_ERROR06501-6501See tõstatatakse siis, kui PL / SQL-il on sisemine probleem.
ROWTYPE_MISMATCH06504-6504See tõuseb, kui kursor tõmbab väärtuse muutumatu andmetüübiga muutujas.
SELF_IS_NULL30625-30625See tõstetakse, kui käivitatakse liikme meetod, kuid objektitüübi eksemplari ei lähtestatud.
STORAGE_ERROR06500-6500See tõstetakse üles siis, kui PL / SQL-i mälu saab otsa või kui mälu on rikutud.
TOO_MANY_ROWS01422-1422See tõuseb, kui SELECT INTO-lause annab rohkem kui ühe rea.
VALUE_ERROR06502-6502See tõuseb, kui ilmneb aritmeetiline, teisendus-, kärpimis- või suuruse piirangu viga.
ZERO_DIVIDE014761476See tõuseb, kui numbrit üritatakse jagada nulliga.

Näide

LOE VÕI ASENDA MENETLUS add_new_student (õpilane _id_in NUMBER, õpilane _name_in VARCHAR2-s) ALGAB INSERT IN Student (õpilase_id, õpilase _nimi) VÄÄRTUSI (õpilase _id_in, õpilase_nimi_in) VÄLJA ARVATUD KUI DUP_VAL_ON_INDIN1kordub_kordama ) KUI TEISED SIIS tõsta_rakenduse_viga (-20002, 'Ilmnes viga') LÕPP

Selles artiklis, mis käsitleb erandite käsitlemist PL / SQL-is, jätkake, mõistame, mis on süsteemi nimetamata erandid.

Nimeta süsteemierandid

Süsteemi erandeid, mille jaoks Oracleil nime pole, nimetatakse nimetuteks süsteemi eranditeks. Neid erandeid ei esine sageli ning need on kirjutatud koodi ja seotud sõnumiga.

Nimeta süsteemierandite käsitlemiseks on põhimõtteliselt kaks võimalust:

1. WHEN OTHERS erandite halduri kasutamine

2. Erandkoodi seostamine nimega ja selle nimelise erandina kasutamine.

Nimetamata süsteemierandite puhul on järgitud mõningaid samme:

  • Tõsta neid kaudselt.
  • Kui neid ei käsitleta jaotises „WHEN Others”, tuleb nendega selgesõnaliselt tegeleda.
  • Erandi selgesõnaliseks käsitsemiseks saab need deklareerida, kasutades Pragma EXCEPTION_INIT, ja käsitledes viidates erandite jaotises kasutaja määratletud erandi nimele.

Näide nimetute erandite käsitlemisest Pragma EXCEPTION_INIT abil on toodud hiljem artiklis. Selles artiklis, mis käsitleb erandite käsitlemist PL / SQL-is, jätkame kasutaja määratletud erandite mõistmist.

Kasutaja määratletud

Nagu kõik teised programmeerimiskeeled, võimaldab ka Oracle teil kuulutada reklaami rakendama oma erandeid. Erinevalt süsteemi määratletud eranditest tõstatatakse need erandid sõnaselgelt PL / SQL-plokis.

Oracle'i andmebaasis kasutaja määratud erandite deklareerimise sammud

Saame Oracle'i andmebaasis määratleda kasutaja määratletud erandid järgmisel kolmel viisil:

  • Muutuja EXCEPTION tüüpi kasutamine

Siin saame kuulutada kasutaja määratletud erandi, deklareerides muutuja EXCEPTION andmetüüp meie koodis ja tõstke see selgesõnaliselt oma programmis, kasutades RAISE-lauset.

  • Funktsiooni PRAGMA EXCEPTION_INIT kasutamine

Eeltoodud vea numbri saame määratleda muutujaga EXCEPTION andmetüüp

  • RAISE_APPLICATION_ERROR meetodi kasutamine

Selle meetodi abil saame kuulutada kasutaja määratud erandi koos meie enda kohandatud tõrke numbri ja teatega.

Siiani võisite saada umbkaudse ettekujutuse viisidest, kuidas me saame kasutaja määratletud erandeid PL / SQL-is tõsta. Me õpime iga ülalnimetatud meetodi kohta koos näidete kirjeldusega käesolevas artiklis erandite käsitlemise kohta PL / SQL-is.

Järgmisena jätkame selles artiklis kasutaja määratletud erandite käitlemise tutvustamist.

Kasutaja määratletud erandite demonstreerimine

Selles artiklis, milles käsitletakse erandite käsitlemist PL / SQL-is, jätkake mõistmist, kuidas kasutada muutujat tüüpi EXCEPTION.

Muutuja EXCEPTION tüüpi kasutamine

Kasutaja määratletud erandi deklareerimise protsess on jagatud kolmeks osaks ja need 3 osa on:

  • Deklareerige muutuja erandi andmetüüp
  • Tõstke erandit
  • Käsitlege erandit

Kirjutame ülaltoodud toimingute üksikasjalikuks näitamiseks koodi.

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

Ülaltoodud deklaratsiooniplokis on meil neli muutujat, millest esimesed kolm on tavalise arvu andmetüüpide muutujad ja neljas, mis on ex_DivZero, on erandandmete muutuja. Neljas on meie kasutaja määratletud erand.

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

Anonüümse ploki ülaltoodud täitmisosa hakkab tööle alles siis, kui jagaja on 0. Kui jagaja on null, nagu see on meie puhul, tõstatatakse viga ja programmi juhtimine jätab kõik järgmised toimingud vahele ja otsib sobivat erandite haldurit. Juhul, kui ta leiab mõne muu, teostab ta toimingu vastavalt, vastasel juhul kas lõpetab programmi või palub meil käsitseda süsteemi määratlemata viga.

ERAND, KUI ex_DivZero SIIS DBMS_OUTPUT.PUT_LINE ('VIGA, jagaja ei tohi olla null')

See erandite käitleja. Niipea kui kasutaja sisestab jagaja väärtuseks 0, küsitakse ülaltoodud sõnumistringi.

Lõplik kood:

DEKLAREERI var_jaoturi NUMBER: = 10 var_jaguri NUMBER: = 0 var_tulemus NUMBER ex-DivZero VÄLJASTAMINE ALGAB KUI var_divisor = 0 SIIS TÕSTA ex-DivZero LÕPP KUI Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PRO_TULU_Tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse_tulemuse = 0 SIIS TÕSTA ex-DivZero LÕPP KUI Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Tulemus =' || var_result) LÕPP

Selles artiklis, mis käsitleb erandite käitlemist PL / SQL-is, jätkake, kuidas kasutada meetodit PRAGMA_EXCEPTION_INIT.

Funktsiooni PRAGMA EXCEPTION_INIT kasutamine

Aastal Funktsioon PRAGMA EXCEPTION_INIT, Oracle'i veanumbriga on seotud erandi nimi. Seda nime saab kasutada vea erandite käitleja kujundamisel.Suurte projektide puhul, kus on palju kasutaja määratletud vigu, on PRAGMA EXCEPTION_INIT kõige kasulikum ja sobivam meetod.

Süntaks:

PRAGMA EXCEPTION_INIT (erandi_nimi, -Oracle_error_number)

Näide

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Mõned toimingud, mis põhjustavad ORA-00060 tõrke ERANDI KUI tupik_tuvastatud THEN NULL - käsitsege viga LÕPP

PRAGMA EXCEPTION_INIT käsib kompilaatoril seostada erandi nimi Oracle'i tõrke numbriga, nagu varem mainitud. See võimaldab teil viidata mis tahes sisemisele erandile nime järgi ja kirjutada selle jaoks konkreetne käitleja. Kui näete veapaketti või tõrketeate järjestust, on ülemine üks see, mida saab kinni hoida ja käsitseda.

Selles artiklis PL / SQL-i erandite käsitlemise kohta edasi liikudes andke meile mõista, kuidas kasutada meetodit RAISE_APPLICATION_ERROR.

RAISE_APPLICATION_ERROR meetodi kasutamine

See on Oracle'i tarkvaraga sisseehitatud protseduur. Selle protseduuri abil saame vea numbri seostada kohandatud tõrketeatega. Kombineerides nii tõrke numbri kui ka kohandatud tõrketeate, saab koostada tõrke stringi, mis näeb välja sarnane vaikevea stringidega, mida viga ilmnemisel kuvab Oracle. RAISE_APPLICATION_ERROR protseduur on paketi DBMS_STANDARD sees

Süntaks

raise_application_error (vea number, sõnum [, TRUE])

Näide

/ * Luuakse päästik trg_emp_detail_chk. * / LOO VÕI ASENDA TRIGGER trg_emp_detail_chk / * Aktiveerimise aeg deklareeritakse tabelis TÖÖTAJAD ENNE VÄRSKENDAMIST. * / Enne töötajate värskendamist DECLARE süsteemiaja päev on kas laupäev või pühapäev või mitte. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('laupäev', 'pühapäev') SIIS raise_application_error (-20000, 'Teil pole luba seda teha kõik muudatused nädalavahetustel !! ') / * Protseduuri raise_application_error kutsutakse esimese parameetri väärtusega -20000 ja teise parameetri vaiketekstiga, mis näitab, et kasutajal pole õigust nädalavahetustel muudatusi teha. * / LÕPP, KUI LÕPPENU

Sellega jõuame selle artikli lõpuni, mis käsitleb erandite käsitlemist PL / SQL-is. Loodan, et sellest teemast saadakse hästi aru ja see aitas teid. Proovige oma koodid kirjutada ja kaasata selles artiklis kirjeldatud meetodid.

Kui soovite saada selle tehnoloogia spetsialistide koolitust, võite edurekast valida struktureeritud koolituse! Vaadake seda Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. See kursus õpetab teid põhimõistete, täiustatud tööriistade ja tehnikate kohta andmete haldamiseks ja MySQL-i andmebaasi haldamiseks. See sisaldab praktilist õppimist sellistel kontseptsioonidel nagu MySQL Workbench, MySQL Server, andmete modelleerimine, MySQL pistik, andmebaaside kujundus, MySQL käsurida, MySQL funktsioonid jne. Koolituse lõpus saate luua ja hallata oma MySQL andmebaasi ja hallata andmed.

Kas teil on meile küsimus? Palun mainige seda selle artikli „Erandite käsitlemine PL / SQL-is“ kommentaaride osas ja võtame teiega ühendust niipea kui võimalik.