Lær hvordan du håndterer unntak i PL / SQL



Denne artikkelen er en omfattende guide om hvordan du utfører unntakshåndtering i PL / SQL ved å diskutere de forskjellige typer unntak som tilbys i PL / SQL.

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.

SQL-unntakshåndtering i PL / SQL-EdurekaNedenfor 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_NULL06530-6530Den heves når et nullobjekt automatisk tildeles en verdi.
CASE_NOT_FOUND06592-6592Det 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_NULL06531-6531Den 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_INDEX00001-enDen heves når dupliserte verdier blir forsøkt lagret i en kolonne med en unik indeks.
INVALID_CURSOR01001-1001Den 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 NUMMER01722-1722Den heves når konverteringen av en tegnstreng til et nummer mislykkes fordi strengen ikke representerer et gyldig tall.
LOGIN_DENIED01017-1017Det heves når et program prøver å logge på databasen med et ugyldig brukernavn eller passord.
INGEN DATA FUNNET01403+100Den heves når en SELECT INTO-setning ikke gir noen rader.
NOT_LOGGED_ON01012-1012Den heves når en databasesamtale blir utstedt uten å være koblet til databasen.
PROGRAM_ERROR06501-6501Det heves når PL / SQL har et internt problem.
ROWTYPE_MISMATCH06504-6504Den heves når en markør henter verdi i en variabel som har inkompatibel datatype.
SELF_IS_NULL30625-30625Den heves når en medlemsmetode blir påkalt, men forekomsten av objekttypen ble ikke initialisert.
STORAGE_ERROR06500-6500Det heves når PL / SQL gikk tom for minne eller minne ble ødelagt.
TOO_MANY_ROWS01422-1422Den heves når en SELECT INTO-setning returnerer mer enn en rad.
VALUE_ERROR06502-6502Den heves når det oppstår feil i aritmetikk, konvertering, avkorting eller størrelsesbegrensning.
ZERO_DIVIDE014761476Det 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.