Hvis du er programmerer, kan du være kjent med begrepet unntakshåndtering er en integrert del av alle . Ettersom feil er uunngåelige og til og med de smarteste av oss kan gjøre feil mens vi skriver kode, må vi være kjent med hvordan vi skal håndtere dem. I denne artikkelen vil vi lære spesielt om unntakshåndtering i PL / SQL.
Nedenfor er emnene dekket i denne artikkelen:
Hva er et unntak?
Enhver unormal tilstand eller hendelse som avbryter den normale strømmen av programinstruksjonene våre på kjøretid eller med enkle ord, et unntak er en feil.
Syntaks for unntakshåndtering i PL / SQL
ERKLÆR BEGYNN UNNTAK Når unntak1 SÅ unntak1-håndteringsuttalelser NÅR unntak2 SÅ unntak2-håndteringsuttalelser NÅR unntak3 SÅ unntak3-håndteringsuttalelser ........ NÅR andre DAN unntak3-håndteringsuttalelser SLUT
Her kan vi liste opp så mange unntak som vi vil håndtere. Standard unntaket vil bli håndtert med 'NÅR andre DANN'
Eksempel på unntakshåndtering i PL / SQL
Programmet nedenfor viser navnet og adressen til en student hvis ID er gitt. Siden det ikke er noen student med ID-verdi 8 i databasen vår, hever programmet kjøretids unntaket NO_DATA_FOUND, som er fanget i EXCEPTION-blokken.
ERKLÆR 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 ('Location:' || s_loc) UNNTAK NÅR no_data_found THEN dbms_output.put_line ('Ingen slik student!') NÅR andre DANN dbms_output.put_line ('Ups, Error!') END
Produksjon
Ingen slik student! PL / SQL-prosedyre fullført.
Her kan vi liste opp så mange unntak som vi vil håndtere. Standard unntaket vil bli håndtert med ‘ NÅR andre SÅ '
Typer unntak i PL / SQL
- Systemdefinert
- Bruker trosset
Neste i denne artikkelen om unntakshåndtering i PL / SQL , la oss diskutere om begge disse typene i detalj.
Systemdefinert
Disse unntakene er definert og vedlikeholdt implisitt av Oracle-serveren, og er hovedsakelig definert i Oracle Standard Package. Når det oppstår et unntak i programmet, samsvarer og identifiserer Oracle-serveren passende unntak fra det tilgjengelige settet med unntak som er tilgjengelig i Oracle-standardpakken. I utgangspunktet er disse unntakene forhåndsdefinert i PL / SQL som blir hevet NÅR en spesiell databaseregel er brutt .
De Systemdefinerte unntak er videre delt inn i to kategorier:
- Navngitte system unntak
- Navnlige system unntak
Navngitte system Unntak
De nevnte PL / SQL-unntakene er navngitt i standardpakken til PL / SQL Derfor trenger ikke utvikleren å definere PL / SQL-unntakene i koden. PL / SQL gir mange forhåndsdefinerte navngitte unntak, som utføres når en hvilken som helst databaseregel er brutt av et program. Tabellen nedenfor viser noen av de viktige forhåndsdefinerte unntakene og minusene
Unntak | Oracle-feil | SQLCODE | Beskrivelse |
ACCESS_INTO_NULL | 06530 | -6530 | Den heves når et nullobjekt automatisk tildeles en verdi. |
CASE_NOT_FOUND | 06592 | -6592 | Det blir tatt opp når ingen av valgene i NÅR-klausulen om a CASE-uttalelse er valgt, og det er ingen ELSE-klausul. |
COLLECTION_IS_NULL | 06531 | -6531 | Den heves når et program prøver å bruke andre samlingsmetoder enn EXISTS på en ikke-initialisert nestet tabell eller varray, eller programmet prøver å tilordne verdier til elementene i en ikke-initialisert nestet tabell eller varray. |
DUP_VAL_ON_INDEX | 00001 | -en | Den heves når dupliserte verdier blir forsøkt lagret i en kolonne med en unik indeks. |
INVALID_CURSOR | 01001 | -1001 | Den heves når det gjøres forsøk på å utføre en markøroperasjon som ikke er tillatt, for eksempel å lukke en uåpnet markør. |
FEIL NUMMER | 01722 | -1722 | Den heves når konverteringen av en tegnstreng til et nummer mislykkes fordi strengen ikke representerer et gyldig tall. |
LOGIN_DENIED | 01017 | -1017 | Det heves når et program prøver å logge på databasen med et ugyldig brukernavn eller passord. |
INGEN DATA FUNNET | 01403 | +100 | Den heves når en SELECT INTO-setning ikke gir noen rader. |
NOT_LOGGED_ON | 01012 | -1012 | Den heves når en databasesamtale blir utstedt uten å være koblet til databasen. |
PROGRAM_ERROR | 06501 | -6501 | Det heves når PL / SQL har et internt problem. |
ROWTYPE_MISMATCH | 06504 | -6504 | Den heves når en markør henter verdi i en variabel som har inkompatibel datatype. |
SELF_IS_NULL | 30625 | -30625 | Den heves når en medlemsmetode blir påkalt, men forekomsten av objekttypen ble ikke initialisert. |
STORAGE_ERROR | 06500 | -6500 | Det heves når PL / SQL gikk tom for minne eller minne ble ødelagt. |
TOO_MANY_ROWS | 01422 | -1422 | Den heves når en SELECT INTO-setning returnerer mer enn en rad. |
VALUE_ERROR | 06502 | -6502 | Den heves når det oppstår feil i aritmetikk, konvertering, avkorting eller størrelsesbegrensning. |
ZERO_DIVIDE | 01476 | 1476 | Det heves når det blir gjort et forsøk på å dele et tall med null. |
Eksempel
OPPRETT ELLER ERSTAT PROSEDYRE add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) IS BEGIN INSERT IN student (student _id, student _name) VALUES (student _id_in, student _name_in) EXCEPTION NÅR DUP_VAL_ON_INDEX DEN høyer_applikasjon_ ) NÅR ANDRE SÅ raise_application_error (-20002, 'Det oppstod en feil.') END
Fortsett i denne artikkelen om unntakshåndtering i PL / SQL, la oss forstå hva som er navngitte system unntak.
Navnlige system unntak
System unntak som Oracle ikke har noe navn for, er kjent som unavngitte system unntak. Disse unntakene forekommer ikke ofte og er skrevet med en kode og en tilhørende melding.
Det er i utgangspunktet to måter å håndtere unavngitte system unntak på:
1. Bruke WHEN OTHERS unntaksbehandler
2. Knytte unntakskoden til et navn og bruke den som et navngitt unntak.
Noen trinn som følges for unavngitte system unntak er:
Linux-administratorroller og ansvar
- Hev dem implisitt.
- I tilfelle de ikke blir håndtert i 'NÅR andre', må de håndteres eksplisitt.
- For å håndtere unntaket eksplisitt, kan de erklæres ved hjelp av Pragma EXCEPTION_INIT og håndteres ved å referere til det brukerdefinerte unntaksnavnet i unntaksdelen.
Et eksempel på håndtering av unavngitte unntak ved bruk av Pragma EXCEPTION_INIT er gitt senere i artikkelen. Fortsett i denne artikkelen om unntakshåndtering i PL / SQL, la oss forstå de brukerdefinerte uttrekkene.
Brukerdefinert
Som alle andre programmeringsspråk, lar Oracle deg også å erklære annonsen for å implementere dine egne unntak. I motsetning til systemdefinerte unntak, heves disse unntakene eksplisitt i PL / SQL-blokken.
Fremgangsmåte for å erklære brukerdefinerte unntak i Oracle-databasen
Vi kan definere brukerdefinerte unntak i Oracle-databasen på følgende 3 måter:
- Bruker variabel av typen UNNTAK
Her kan vi erklære et brukerdefinert unntak ved å erklære variabelen EXCEPTION data-type i koden vår og heve den eksplisitt i vårt program ved bruk av RAISE-setning.
- Bruker funksjonen PRAGMA EXCEPTION_INIT
Vi kan definere et ikke-forhåndsdefinert feilnummer med variabelen til UNNTAK datatype
enkel hashmap implementering i java
- Bruker RAISE_APPLICATION_ERROR-metoden
Ved hjelp av denne metoden kan vi erklære et brukerdefinert unntak med vårt eget tilpassede feilnummer og melding.
Inntil nå har du kanskje fått en grov ide om hvordan vi kan heve brukerdefinerte unntak i PL / SQL. Vi vil lære om hver av de ovennevnte metodene med eksempler videre i denne artikkelen om unntakshåndtering i PL / SQL.
Neste i denne artikkelen, la oss fortsette med demonstrasjonene av brukerdefinert unntakshåndtering.
Demonstrasjon av brukerdefinerte unntak
Fortsett i denne artikkelen om unntakshåndtering i PL / SQL, la oss forstå hvordan vi bruker variabelen av typen EXCEPTION.
Bruker variabel av typen UNNTAK
Prosessen med å erklære brukerdefinert unntak er delt inn i tre deler, og disse tre delene er:
- Erklær datatype for variabelt unntak
- Hev unntaket
- Håndter unntaket
La oss skrive en kode for å demonstrere trinnene ovenfor i detalj.
ERKLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero UNNTAK
I ovennevnte erklæringsblokk har vi fire variabler, hvorav de tre første er normale talldatatypevariabler, og den fjerde som er ex_DivZero er den spesielle unntaket datatypevariabelen. Den fjerde er vårt brukerdefinerte unntak.
ERKLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero UNNTAK
Ovennevnte utførelsesdel av denne anonyme blokken, vil bare komme til handling når divisoren er 0. Hvis divisoren er null slik den er i vårt tilfelle, vil feilen bli hevet og kontrollen av programmet hopper over alle de neste trinnene og vil se etter matchende unntakshåndterer. I tilfelle der den finner andre, vil den utføre handlingen tilsvarende, ellers vil den enten avslutte programmet eller be oss om en ubehandlet systemdefinert feil.
UNNTAK NÅR ex_DivZero SÅ DBMS_OUTPUT.PUT_LINE (‘FEIL, skillelinjen kan ikke være null’)
Dette unntakshandleren. Så snart brukeren angir divisor som 0, blir meldingsstrengen ovenfor bedt om det.
Endelig kode:
ERKLÆR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero UNNTAK BEGYNN var_divisor = 0 SÅ HØY ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('resultat_' = resultat = 'Resultat =' | = 0 SÅ RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END
Fortsett i denne artikkelen om unntakshåndtering i PL / SQL, la oss forstå hvordan du bruker metoden PRAGMA_EXCEPTION_INIT.
Bruker funksjonen PRAGMA EXCEPTION_INIT
I PRAGMA EXCEPTION_INIT-funksjon, et unntaksnavn er knyttet til et Oracle-feilnummer. Dette navnet kan brukes til å designe unntaksbehandleren for feilen.For store prosjekter med mange brukerdefinerte feil er PRAGMA EXCEPTION_INIT den mest nyttige og passende metoden.
Syntaks:
PRAGMA EXCEPTION_INIT (unntaksnavn, -Oracle_error_number)
Eksempel
ERKLÆRE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Noen operasjoner som forårsaker en ORA-00060-feil UNNTAK NÅR deadlock_detected THEN NULL - håndter feilen END
PRAGMA EXCEPTION_INIT forteller kompilatoren å knytte et unntaksnavn til et Oracle-feilnummer som nevnt tidligere. Det lar deg referere til ethvert internt unntak ved navn og skrive en spesifikk behandler for det. Når du ser en feilstakke, eller en sekvens av feilmeldinger, er den på toppen den som kan fanges og håndteres.
Fortsett i denne artikkelen om unntakshåndtering i PL / SQL, la oss forstå hvordan vi bruker metoden RAISE_APPLICATION_ERROR.
Bruker RAISE_APPLICATION_ERROR-metoden
Det er en prosedyre som følger med Oracle-programvaren. Ved hjelp av denne prosedyren kan vi knytte et feilnummer til en tilpasset feilmelding. Ved å kombinere både feilnummeret og den egendefinerte feilmeldingen, kan en feilstreng komponeres som ligner på de standard feilstrengene som vises av oracle når en feil oppstår. RAISE_APPLICATION_ERROR-prosedyren finnes i DBMS_STANDARD-pakken
Syntaks
raise_application_error (error_number, message [, TRUE])
Eksempel
/ * En utløser trg_emp_detail_chk opprettes. * / OPPRETT ELLER ERSTATT TRIGGER trg_emp_detail_chk / * Utløsertimingen blir erklært FØR OPPDATERING i MEDARBEIDERSTABELLEN. * / Før UPDATE PÅ MEDARBEIDER ERKLÆRER tillatelse_nektet UNNTAK BEGYNNER / * Start av IF-tilstand dagen for systemtiden er enten lørdag eller søndag eller ikke. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday,' Sunday ') THEN raise_application_error (-20000,' Du er ikke autorisert til å gjøre enhver endring i helgene !! ') / * Prosedyren raise_application_error kalles med den første parameterverdien som -20000 og den andre parameteren med en standardtekst som sier at brukeren ikke er autorisert til å gjøre noen endringer i helgene. * / SLUT HVIS SLUTT
Med dette kommer vi til en slutt på denne artikkelen om “Unntakshåndtering i PL / SQL”. Jeg håper dette emnet blir forstått godt og hjulpet deg. Prøv å skrive dine egne koder og innlemme metodene som er forklart i denne artikkelen.
Hvis du vil bli trent fra fagfolk på denne teknologien, kan du velge strukturert opplæring fra edureka! Sjekk ut dette av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden. Dette kurset trener deg om kjernekonseptene og avanserte verktøy og teknikker for å administrere data og administrere MySQL-databasen. Den inkluderer praktisk læring om konsepter som MySQL Workbench, MySQL Server, Data Modelling, MySQL Connector, Database Design, MySQL Command line, MySQL Funksjoner osv. Avslutningen av opplæringen vil du kunne lage og administrere din egen MySQL Database og administrere data.
Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne “Unntakshåndtering i PL / SQL” -artikkelen, så vil vi komme tilbake til deg så snart som mulig.