Opi käsittelemään PL / SQL: n poikkeuksia



Tämä artikkeli on kattava opas poikkeusten käsittelystä PL / SQL: ssä keskustelemalla PL / SQL: ssä tarjottavista erityyppisistä poikkeuksista.

Jos olet ohjelmoija, saatat tuntea, että poikkeusten käsittely on olennainen osa mitä tahansa . Koska virheet ovat väistämättömiä ja jopa älykkäin meistä voi tehdä virheitä kirjoittaessasi koodia, meidän on tunnettava, miten niitä käsitellään. Tässä artikkelissa opitaan erityisesti poikkeusten käsittelystä PL / SQL: ssä.

SQL-poikkeusten käsittely PL / SQL-EdurekassaTässä ovat tämän artikkelin aiheet:





Mikä on poikkeus?

Mikä tahansa epänormaali tila tai tapahtuma, joka keskeyttää ohjelmaohjeidemme normaalin kulun ajon aikana tai yksinkertaisilla sanoilla poikkeus, on virhe.

Poikkeusten käsittelyn syntaksi PL / SQL: ssä

ILMOITA ALOITTAVA POIKKEUS, kun poikkeus1 Sitten poikkeus1-käsittelylausekkeet, kun poikkeus2 Sitten poikkeus2-käsittelylausekkeet, kun poikkeus3, sitten poikkeus3, käsittely-lauseet, ...

Täällä voimme luetella niin monta poikkeusta kuin haluamme käsitellä. Oletuspoikkeus käsitellään kohdassa 'WHEN others THEN'



Esimerkki poikkeusten käsittelystä PL / SQL: ssä

Alla olevassa ohjelmassa näkyy opiskelijan nimi ja osoite, jonka henkilöllisyystodistus annetaan. Koska tietokannassamme ei ole opiskelijaa, jolla on ID-arvo 8, ohjelma nostaa ajonaikaisen poikkeuksen NO_DATA_FOUND, joka on kaapattu EXCEPTION-lohkoon.

ILMOITA 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 ('Sijainti:' || s_loc) POIKKEUS SEN kun no_data_found THEN dbms_output.put_line ('Ei sellaista opiskelijaa!') KUN MUUT SITTEN dbms_output.put_line ('Hups, virhe!') LOPPU

Tuotos

Ei sellaista opiskelijaa! PL / SQL-menettely on suoritettu onnistuneesti.

Täällä voimme luetella niin monta poikkeusta kuin haluamme käsitellä. Oletuspoikkeus käsitellään käyttäen MILLOIN muut sitten '

PL / SQL: n poikkeustyypit

  • Järjestelmä määritelty
  • Käyttäjä uhmaa

Seuraava tässä artikkelissa poikkeusten käsittelystä PL / SQL , keskustelkaamme molemmista näistä tyyppeistä yksityiskohtaisesti.



Järjestelmä määritelty

Oracle-palvelin määrittelee ja ylläpitää niitä epäsuorasti, nämä poikkeukset määritellään pääasiassa Oracle Standard Package -palvelussa. Aina kun ohjelmassa tapahtuu poikkeus, Oracle-palvelin täsmää ja tunnistaa sopivan poikkeuksen Oracle-vakiopaketissa käytettävissä olevista poikkeuksista. Periaatteessa nämä poikkeukset on määritelty ennalta PL / SQL joka nousee KUN tiettyä tietokantasääntöä rikotaan .

Järjestelmän määrittelemät poikkeukset jaetaan edelleen kahteen luokkaan:

  • Nimetyt järjestelmäpoikkeukset
  • Nimettömät järjestelmäpoikkeukset

Nimetty järjestelmä Poikkeukset

Nimetyt PL / SQL-poikkeukset ovat nimetty vakiopaketissa PL / SQL , joten kehittäjän ei tarvitse määritellä PL / SQL-poikkeuksia koodissaan. PL / SQL tarjoaa monia ennalta määriteltyjä nimettyjä poikkeuksia, jotka suoritetaan, kun ohjelma rikkoo mitä tahansa tietokantasääntöä. Seuraavassa taulukossa on lueteltu muutamia tärkeitä ennalta määriteltyjä poikkeuksia ja miinus

Poikkeus Oracle-virhe SQLCODE Kuvaus
ACCESS_INTO_NULL06530-6530Se nousee, kun null-objektille määritetään arvo automaattisesti.
CASE_NOT_FOUND06592-6592Se nousee esiin, kun mikään MITEN a-lausekkeen valinnoista CASE-lausunto on valittu, eikä ELSE-lauseketta ole.
COLLECTION_IS_NULL06531-6531Se nousee esiin, kun ohjelma yrittää soveltaa muita keräysmenetelmiä kuin EXISTS alustamattomaan sisäkkäiseen taulukkoon tai taulukkoon tai ohjelma yrittää määrittää arvoja alustamattoman sisäkkäisen taulukon tai varrayn elementeille.
DUP_VAL_ON_INDEX00001-yksiSe nousee, kun kaksoisarvoja yritetään tallentaa sarakkeeseen, jolla on ainutlaatuinen hakemisto.
INVALID_CURSOR01001-1001Se nousee, kun kohdistinta yritetään tehdä, mikä ei ole sallittua, kuten sulkemalla avaamaton kohdistin.
VÄÄRÄ NUMERO01722-1722Se nousee, kun merkkijonon muuntaminen numeroksi epäonnistuu, koska merkkijono ei edusta kelvollista numeroa.
LOGIN_DENIED01017-1017Se nousee, kun ohjelma yrittää kirjautua tietokantaan virheellisellä käyttäjänimellä tai salasanalla.
DATAA EI LÖYTYNYT01403+100Se nousee, kun SELECT INTO -käsky ei palauta rivejä.
EI_LOGGETTU01012-1012Se nousee, kun tietokantapuhelu soitetaan ilman yhteyttä tietokantaan.
PROGRAM_ERROR06501-6501Se nousee esiin, kun PL / SQL: llä on sisäinen ongelma.
ROWTYPE_MISMATCH06504-6504Se nousee, kun kohdistin hakee arvon muuttujassa, jolla on yhteensopimaton tietotyyppi.
SELF_IS_NULL30625-30625Se nousee, kun jäsenmenetelmää kutsutaan, mutta objektityypin esiintymää ei alustettu.
STORAGE_ERROR06500-6500Se nousee, kun PL / SQL: n muisti loppui tai muisti vioittui.
TOO_MANY_ROWS01422-1422Se nousee, kun SELECT INTO -käsky palauttaa useamman kuin yhden rivin.
VALUE_ERROR06502-6502Se nousee, kun esiintyy aritmeettinen, muunnos-, katkaisu- tai kokorajoitusvirhe.
ZERO_DIVIDE014761476Se nousee, kun yritetään jakaa numero nollalla.

Esimerkki

Luo tai vaihda menettely add_new_student (opiskelijan _id_in NUMEROSSA, opiskelijan _name_in VARCHAR2: ssa) ALOITA INSERT INTO opiskelijaan (opiskelijan _id, opiskelijan_nimi) ARVOT (opiskelijan _id_in, opiskelijan_nimi_in) POIKKEEN, JOS DUP_VAL_ON_INDIN1plus_lisää_lisää_lisää_lisää_lisää_lisää_lisää_lisää_lisää_lisää_lisää_lisää 'Lisää' (lisää) ) WHO OTHERS THEN rais_application_error (-20002, 'Tapahtui virhe.) END

Siirtymällä tähän artikkeliin PL / SQL: n poikkeusten käsittelystä, ymmärretään, mitkä ovat nimettömiä järjestelmän poikkeuksia.

mitä pavut ovat jaavassa

Nimettömät järjestelmän poikkeukset

Järjestelmäpoikkeukset, joille Oraclella ei ole nimeä, kutsutaan nimettömiksi järjestelmäpoikkeuksiksi. Näitä poikkeuksia ei tapahdu usein, ja ne kirjoitetaan koodilla ja siihen liittyvällä viestillä.

On periaatteessa kaksi tapaa käsitellä nimeämättömiä järjestelmän poikkeuksia:

1. Käytä WHEN OTHERS -poistekäsittelijää

2. Liitä poikkeuskoodi nimeen ja käytä sitä nimettynä poikkeuksena.

Joitakin vaiheita nimettömissä järjestelmäpoikkeuksissa ovat:

  • Nosta heitä implisiittisesti.
  • Jos niitä ei käsitellä ”WHEN Others” -kohdassa, niitä on käsiteltävä nimenomaisesti.
  • Jos haluat käsitellä poikkeusta nimenomaisesti, ne voidaan ilmoittaa käyttämällä Pragma EXCEPTION_INIT ja käsitellä viittaamalla käyttäjän määrittämään poikkeuksen osaan poikkeusosassa.

Seuraava artikkeli tarjoaa esimerkin nimeämättömien poikkeusten käsittelystä Pragma EXCEPTION_INIT -tekniikalla. Tässä artikkelissa, jossa käsitellään poikkeusten käsittelyä PL / SQL: ssä, ymmärretään käyttäjän määrittelemät poikkeukset.

Käyttäjän määrittelemä

Kuten kaikki muutkin ohjelmointikielet, Oraclen avulla voit myös ilmoittaa mainosten toteuttavan omat poikkeuksesi. Toisin kuin järjestelmän määrittelemät poikkeukset, nämä poikkeukset tuodaan esiin nimenomaisesti PL / SQL-lohkossa.

Vaiheet ilmoittaaksesi käyttäjän määrittelemät poikkeukset Oracle-tietokannassa

Voimme määritellä käyttäjän määrittelemät poikkeukset Oracle-tietokannassa seuraavilla kolmella tavalla:

  • Muuttujan EXCEPTION käyttäminen

Täällä voimme julistaa käyttäjän määrittelemän poikkeuksen ilmoittamalla muuttujan EXCEPTION tietotyyppi koodissamme ja nosta se nimenomaisesti ohjelmassa RAISE-käskyn avulla.

löytää suurin joukko java-taulukkoa
  • PRAGMA EXCEPTION_INIT -toiminnon käyttäminen

Voimme määritellä ennalta määrittelemättömän virheluvun EXCEPTION-tietotyypin muuttujalla

  • RAISE_APPLICATION_ERROR-menetelmän käyttö

Tämän menetelmän avulla voimme julistaa käyttäjän määrittelemän poikkeuksen omalla räätälöityllä virhenumerolla ja viestillä.

Tähän asti saatat saada karkean käsityksen tavoista, joilla voimme nostaa käyttäjän määrittelemiä poikkeuksia PL / SQL: ssä. Opimme kaikista edellä mainituista menetelmistä ja esimerkkejä tästä artikkelista poikkeusten käsittelystä PL / SQL: ssä.

Seuraavaksi tässä artikkelissa jatketaan Käyttäjän määrittelemien poikkeusten käsittelyn esittelyjä.

Käyttäjän määrittelemien poikkeusten esittely

Tässä artikkelissa PL / SQL: n poikkeuskäsittelystä kerrotaan, kuinka käytetään EXCEPTION-tyypin muuttujaa.

Muuttujan EXCEPTION käyttäminen

Käyttäjän määrittelemän poikkeuksen ilmoittamisprosessi on jaettu kolmeen osaan, ja nämä 3 osaa ovat:

  • Ilmoita muuttuvan poikkeuksen tietotyyppi
  • Nosta poikkeusta
  • Käsittele poikkeusta

Kirjoitetaan koodi osoittamaan yllä olevat vaiheet yksityiskohtaisesti.

ILMOITA var_jako NUMERO: = 10 var_jakajan NUMERO: = 0 var_tulos NUMERO ex-DivZero POIKKEUS

Yllä olevassa ilmoituslohkossa meillä on neljä muuttujaa, joista kolme ensimmäistä ovat normaalinumerotyyppimuuttujia ja neljäs, joka on ex_DivZero, on erityinen poikkeustyyppimuuttuja. Neljäs on käyttäjän määrittelemä poikkeus.

ILMOITA var_jako NUMERO: = 10 var_jakajan NUMERO: = 0 var_tulos NUMERO ex-DivZero POIKKEUS

Tämän anonyymin lohkon yllä oleva toteutusosa tulee toimintaan vasta, kun jakaja on 0. Jos jakaja on nolla, kuten se on meidän tapauksessamme, virhe nousee ja ohjelman hallinta ohittaa kaikki seuraavat vaiheet ja etsii vastaavaa poikkeuskäsittelijää. Siinä tapauksessa, että se löytää muita, se suorittaa toiminnon vastaavasti, muuten se joko lopettaa ohjelman tai kehottaa meitä käsittelemättömällä järjestelmän määrittelemällä virheellä.

POIKKEUS, JOS ex_DivZero THEN DBMS_OUTPUT.PUT_LINE ('VIRHE, jakaja ei voi olla nolla')

Tämä poikkeuksen käsittelijä. Heti kun käyttäjä antaa jakajan arvoksi 0, yllä olevaa viestimerkkijonoa pyydetään.

Lopullinen koodi:

ILMOITA var_jako NUMERO: = 10 var_jakajan NUMERO: = 0 var_tulos NUMERO ex-DivZero POIKKEUS ALOITA JOS var_jakaja = 0 SENNEN NOSTA ex-DivZero LOPETA JOS Var_tulos: = var_jako / var_jakaja DBMS_OUTPUT_Tulos_tulos_Tulos_tulos_Tulos_ tuloksen = 0 Sitten korota ex-DivZero LOPETA JOS Var_tulos: = var_jako / var_jakaja DBMS_OUTPUT.PUT_LINE ('Tulos =' || var_tulos) LOPPU

Tässä artikkelissa, jossa käsitellään poikkeusten käsittelyä PL / SQL: ssä, ymmärretään, miten PRAGMA_EXCEPTION_INIT-menetelmää käytetään.

PRAGMA EXCEPTION_INIT -toiminnon käyttäminen

vuonna PRAGMA EXCEPTION_INIT -toiminto, poikkeuksen nimi liittyy Oracle-virheen numeroon. Tätä nimeä voidaan käyttää virheen poikkeuskäsittelijän suunnittelussa.Suurille projekteille, joissa on paljon käyttäjän määrittämiä virheitä, PRAGMA EXCEPTION_INIT on hyödyllisin ja sopivin menetelmä.

Syntaksi:

PRAGMA EXCEPTION_INIT (poikkeuksen_nimi, -Oracle_error_numero)

Esimerkki

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Jotkut toiminnot, jotka aiheuttavat ORA-00060-virheen POIKKEUS KUN SEURAAVA_TUNNISTETTU SEN NULL - käsittele virhe LOPPU

PRAGMA EXCEPTION_INIT käskee kääntäjän liittämään poikkeuksen nimen Oracle-virheen numeroon, kuten aiemmin mainittiin. Sen avulla voit viitata kaikkiin sisäisiin poikkeuksiin nimen mukaan ja kirjoittaa sille tietyn käsittelijän. Kun näet virhepinon tai virhesanomien sarjan, ylhäällä oleva on se, joka voidaan pitää kiinni ja käsitellä.

Siirtymällä tähän artikkeliin PL / SQL: n poikkeuskäsittelystä, ymmärretään, kuinka RAISE_APPLICATION_ERROR-menetelmää käytetään.

RAISE_APPLICATION_ERROR-menetelmän käyttö

Se on menettely, joka on sisäänrakennettu oracle-ohjelmiston kanssa. Tätä menettelyä käyttämällä voimme liittää virheen numeron mukautettuun virheilmoitukseen. Yhdistämällä sekä virheen numeron että mukautetun virhesanoman voidaan muodostaa virhemerkkijono, joka näyttää samanlaiselta kuin oletusvirhesarjat, jotka Oracle näyttää virheiden kohdatessa. RAISE_APPLICATION_ERROR-menettely löytyy DBMS_STANDARD-paketista

Syntaksi

raise_application_error (virheen numero, viesti [, TOSI])

Esimerkki

/ * Liipaisin trg_emp_detail_chk luodaan. * / Luo tai vaihda liipaisin trg_emp_detail_chk / * Liipaisun ajoitus ilmoitetaan ENNEN PÄIVITTÄMISTÄ TYÖNTEKIJÖIDEN taulukossa. * / Ennen työntekijöiden päivitystä ILMOITA Järjestelmäajan päivä on joko lauantai tai sunnuntai vai ei. * / JOS trimmaus (TO_CHAR (sysdate, 'Päivä')) IN ('Lauantai', 'Sunnuntai') SITTEN rais_application_error (-20000, 'Sinulla ei ole lupaa tehdä kaikki muutokset viikonloppuisin !! ') / * Menettelyä raise_application_error kutsutaan ensimmäisen parametrin arvoksi -20000 ja toisen parametrin oletustekstiksi, joka kertoo, että käyttäjällä ei ole valtuuksia tehdä muutoksia viikonloppuisin. * / LOPPU, JOS PÄÄTTYY

Tämän kanssa olemme päässeet tämän artikkelin 'Poikkeusten käsittely PL / SQL: ssä' loppuun. Toivon, että tämä aihe ymmärretään hyvin ja auttoi sinua. Yritä kirjoittaa omat koodisi ja sisällyttää tässä artikkelissa selitetyt menetelmät.

Jos haluat saada ammattilaisia ​​kouluttamaan tätä tekniikkaa, voit valita strukturoidun koulutuksen edurekalta! Katso tämä Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Tämä kurssi kouluttaa sinut keskeisiin käsitteisiin, edistyneisiin työkaluihin ja tekniikoihin tietojen hallitsemiseksi ja MySQL-tietokannan hallitsemiseksi. Se sisältää käytännön oppimisen käsitteistä, kuten MySQL Workbench, MySQL Server, tietomallinnus, MySQL-liitin, tietokannan suunnittelu, MySQL-komentorivi, MySQL-toiminnot jne. Koulutuksen lopussa voit luoda ja hallita omaa MySQL-tietokantaa ja hallita tiedot.

Onko sinulla kysymys meille? Mainitse se tämän artikkelin 'Poikkeusten käsittely PL / SQL: ssä' kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.