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



Denne artikel er en omfattende guide til, hvordan man udfører undtagelseshåndtering i PL / SQL ved at diskutere de forskellige typer undtagelser, der tilbydes i PL / SQL.

Hvis du er programmør, er du muligvis bekendt med begrebet undtagelsesbehandling er en integreret del af enhver . Da fejl er uundgåelige, og selv de klogeste af os kan begå fejl, mens vi skriver kode, skal vi være bekendt med, hvordan vi skal håndtere dem. I denne artikel lærer vi især om undtagelseshåndtering i PL / SQL.

SQL-undtagelseshåndtering i PL / SQL-EdurekaNedenfor er emnerne i denne artikel:





Hvad er en undtagelse?

Enhver unormal tilstand eller begivenhed, der afbryder den normale strøm af vores programinstruktioner på kørselstid eller med enkle ord, en undtagelse er en fejl.

Syntaks for undtagelseshåndtering i PL / SQL

ERKLÆR BEGYND UNDTAGELSE NÅR undtagelse1 SÅ undtagelse1-håndteringserklæringer NÅR undtagelse2 DANNE undtagelse2-håndteringserklæringer NÅR undtagelse3 SÅ undtagelse3-håndteringserklæringer ........ NÅR andre SÅ undtagelse3-håndteringserklæringer SLUT

Her kan vi liste så mange undtagelser, som vi vil håndtere. Standardundtagelsen håndteres ved hjælp af 'NÅR andre DANN'



Eksempel på undtagelseshåndtering i PL / SQL

Nedenstående program viser navn og adresse på en studerende, hvis id er angivet. Da der ikke er nogen studerende med ID-værdi 8 i vores database, hæver programmet kørselstidsundtagelsen 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 VÆLG navn, loation INTO s_name, s_loc FRA studerende WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) UNDTAGELSE NÅR no_data_found THEN dbms_output.put_line ('Ingen sådan studerende!') NÅR andre DAN dbms_output.put_line ('Ups, Error!') END

Produktion

Ingen sådan studerende! PL / SQL-proceduren blev gennemført.

Her kan vi liste så mange undtagelser, som vi vil håndtere. Standardundtagelsen håndteres ved hjælp af ' NÅR andre SÅ ''

Typer af undtagelser i PL / SQL

  • System defineret
  • Bruger trodset

Næste i denne artikel om undtagelseshåndtering i PL / SQL , lad os diskutere begge disse typer i detaljer.



System defineret

Disse undtagelser er defineret og vedligeholdt implicit af Oracle-serveren og defineres hovedsageligt i Oracle Standard Package. Hver gang der forekommer en undtagelse inde i programmet, matcher og identificerer Oracle-serveren den passende undtagelse fra det tilgængelige sæt undtagelser, der er tilgængeligt i oracle-standardpakken. Dybest set er disse undtagelser foruddefineret i PL / SQL som bliver rejst NÅR en bestemt database regel overtrædes .

Det Systemdefinerede undtagelser er yderligere opdelt i to kategorier:

  • Navngivne systemundtagelser
  • Navnlige systemundtagelser

Navngivne systemundtagelser

De navngivne PL / SQL-undtagelser er navngivet i standardpakken med PL / SQL Derfor behøver udvikleren ikke at definere PL / SQL-undtagelserne i deres kode. PL / SQL indeholder mange foruddefinerede navngivne undtagelser, som udføres, når en databasestyrke overtrædes af et program. Den følgende tabel viser et par af de vigtige foruddefinerede undtagelser og minus

Undtagelse Oracle-fejl SQLCODE Beskrivelse
ACCESS_INTO_NULL06530-6530Det hæves, når et null-objekt automatisk tildeles en værdi.
CASE_NOT_FOUND06592-6592Det hæves, når ingen af ​​valgene i WHEN-klausulen om a CASE-erklæring er valgt, og der er ingen ELSE-klausul.
COLLECTION_IS_NULL06531-6531Det hæves, når et program forsøger at anvende andre opsamlingsmetoder end EXISTS til en ikke-initialiseret indlejret tabel eller varray, eller programmet forsøger at tildele værdier til elementerne i en ikke-initialiseret indlejret tabel eller varray.
DUP_VAL_ON_INDEX00001-enDet hæves, når duplikatværdier forsøges lagret i en kolonne med et unikt indeks.
INVALID_CURSOR01001-1001Det hæves, når der gøres forsøg på at foretage en markørhandling, der ikke er tilladt, såsom at lukke en uåbnet markør.
INVALID_NUMBER01722-1722Det hæves, når konvertering af en tegnstreng til et nummer mislykkes, fordi strengen ikke repræsenterer et gyldigt tal.
LOGIN_DENIED01017-1017Det hæves, når et program forsøger at logge på databasen med et ugyldigt brugernavn eller en adgangskode.
INGEN DATA FUNDET01403+100Det hæves, når en SELECT INTO-sætning ikke returnerer nogen rækker.
NOT_LOGGED_ON01012-1012Det hæves, når der udstedes et databaseopkald uden at være forbundet til databasen.
PROGRAM_ERROR06501-6501Det hæves, når PL / SQL har et internt problem.
ROWTYPE_MISMATCH06504-6504Det hæves, når en markør henter værdi i en variabel, der har inkompatibel datatype.
SELF_IS_NULL30625-30625Det hæves, når en medlemsmetode påberåbes, men forekomsten af ​​objekttypen blev ikke initialiseret.
STORAGE_ERROR06500-6500Det hæves, når PL / SQL løb tør for hukommelse, eller hukommelsen var beskadiget.
TOO_MANY_ROWS01422-1422Det hæves, når en SELECT INTO-sætning returnerer mere end en række.
VALUE_ERROR06502-6502Det hæves, når der opstår en aritmetik-, konverterings-, trunkerings- eller størrelsesbegrænsningsfejl.
ZERO_DIVIDE014761476Det hæves, når der forsøges at dividere et tal med nul.

Eksempel

OPRET ELLER UDSKIFT PROCEDURE 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) UNDTAGELSE NÅR DUP_VAL_ON_INDEX THEN hæve_applikation_applikation_ ) NÅR ANDRE DAN raise_application_error (-20002, 'Der opstod en fejl.') END

Gå videre i denne artikel om undtagelseshåndtering i PL / SQL, lad os forstå, hvad der er unavngivne systemundtagelser.

Navnlige systemundtagelser

Systemundtagelserne, som Oracle ikke har et navn for, er kendt som unavngivne systemundtagelser. Disse undtagelser forekommer ikke ofte og er skrevet med en kode og en tilknyttet meddelelse.

Der er grundlæggende to måder at håndtere unavngivne systemundtagelser på:

1. Brug af WHEN ANDERS undtagelsesbehandler

2. At knytte undtagelseskoden til et navn og bruge den som en navngivet undtagelse.

Nogle trin, der følges for unavngivne systemundtagelser, er:

Opret ec2-forekomst fra øjebliksbillede
  • Løft dem implicit.
  • Hvis de ikke håndteres i 'NÅR andre', skal de håndteres eksplicit.
  • For at håndtere undtagelsen eksplicit kan de erklæres ved hjælp af Pragma EXCEPTION_INIT og håndteres ved at henvise til det brugerdefinerede undtagelsesnavn i undtagelsesafsnittet.

Et eksempel på håndtering af unavngivne undtagelser ved hjælp af Pragma EXCEPTION_INIT findes senere i artiklen. Gå videre i denne artikel om undtagelseshåndtering i PL / SQL, lad os forstå de brugerdefinerede udtagninger.

Brugerdefineret

Som alle andre programmeringssprog giver Oracle dig også mulighed for at erklære annonceimplementering dine egne undtagelser. I modsætning til systemdefinerede undtagelser hæves disse undtagelser eksplicit i PL / SQL-blokken.

Trin til at erklære brugerdefinerede undtagelser i Oracle-databasen

Vi kan definere brugerdefinerede undtagelser i Oracle-databasen på følgende 3 måder:

  • Brug af variabel af typen UNDTAGELSE

Her kan vi erklære en brugerdefineret undtagelse ved at erklære variablen EXCEPTION datatype i vores kode og hæv det eksplicit i vores program ved hjælp af RAISE-erklæring.

  • Brug af PRAGMA EXCEPTION_INIT-funktionen

Vi kan definere et ikke-foruddefineret fejlnummer med variablen EXCEPTION datatype

  • Brug RAISE_APPLICATION_ERROR-metoden

Ved hjælp af denne metode kan vi erklære en brugerdefineret undtagelse med vores eget tilpassede fejlnummer og besked.

Indtil nu har du muligvis fået en grov idé om, hvordan vi kan hæve brugerdefinerede undtagelser i PL / SQL. Vi lærer om hver af de ovennævnte metoder med eksempler yderligere i denne artikel om undtagelseshåndtering i PL / SQL.

Næste i denne artikel, lad os fortsætte med demonstrationerne af brugerdefineret undtagelseshåndtering.

Demonstration af brugerdefinerede undtagelser

Når vi fortsætter i denne artikel om undtagelseshåndtering i PL / SQL, lad os forstå, hvordan vi bruger variablen af ​​EXCEPTION-typen.

Brug af variabel af typen UNDTAGELSE

Processen med at erklære brugerdefineret undtagelse er opdelt i tre dele, og disse 3 dele er:

  • Erklær en datatype med variabel undtagelse
  • Hæv undtagelsen
  • Håndter undtagelsen

Lad os skrive en kode for at demonstrere ovenstående trin i detaljer.

ERKLÆR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

I ovenstående erklæringsblok har vi fire variabler, blandt hvilke de første tre er normale antal datatypevariabler, og den fjerde, der er ex_DivZero, er den specielle undtagelse datatypevariabel. Den fjerde er vores brugerdefinerede undtagelse.

ERKLÆR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

Ovenstående eksekveringsdel af denne anonyme blok, vil kun komme i aktion, når divisoren er 0. Hvis divisoren er nul, som den er i vores tilfælde, hæves fejlen, og styringen af ​​programmet springer alle de næste trin over og vil se efter matchende undtagelsesbehandler. I tilfælde af at det finder noget andet, udfører det handlingen i overensstemmelse hermed, ellers vil det enten afslutte programmet eller bede os om en uhåndteret systemdefineret fejl.

UNDTAGELSE NÅR ex_DivZero DAN DBMS_OUTPUT.PUT_LINE (‘FEJL, deleren kan ikke være nul’)

Dette er undtagelsesbehandleren. Så snart brugeren indtaster divisoren som 0, bliver ovenstående meddelelsesstreng bedt om.

Endelig kode:

ERKLÆR var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THAN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('resultat_' = resultat = 'resultat =' | = 0 DAN HÆVER ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

Gå videre i denne artikel om undtagelseshåndtering i PL / SQL, lad os forstå, hvordan man bruger metoden PRAGMA_EXCEPTION_INIT.

Brug af PRAGMA EXCEPTION_INIT-funktionen

I PRAGMA EXCEPTION_INIT-funktion, et undtagelsesnavn er knyttet til et Oracle-fejlnummer. Dette navn kan bruges til at designe undtagelsesbehandleren til fejlen.For store projekter med mange brugerdefinerede fejl er PRAGMA EXCEPTION_INIT den mest nyttige og egnede metode.

Syntaks:

PRAGMA EXCEPTION_INIT (undtagelsesnavn, -Oracle_error_number)

Eksempel

ERKLÆR deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Nogle handlinger, der forårsager en ORA-00060-fejl UNDTAGELSE NÅR deadlock_detected THEN NULL - håndter fejlen END

PRAGMA EXCEPTION_INIT fortæller compileren at knytte et undtagelsesnavn til et Oracle-fejlnummer som nævnt tidligere. Det lader dig henvise til enhver intern undtagelse ved navn og skrive en bestemt handler til den. Når du ser en fejlstakke eller en række fejlmeddelelser, er den øverst den, der kan fanges og håndteres.

Gå videre i denne artikel om undtagelseshåndtering i PL / SQL, lad os forstå, hvordan vi bruger metoden RAISE_APPLICATION_ERROR.

Brug RAISE_APPLICATION_ERROR-metoden

Det er en procedure, der følger med oracle-softwaren. Ved hjælp af denne procedure kan vi knytte et fejlnummer til en brugerdefineret fejlmeddelelse. Ved at kombinere både fejlnummeret og den brugerdefinerede fejlmeddelelse kan der sammensættes en fejlstreng, der ligner de standardfejlstrenge, der vises af oracle, når der opstår en fejl. RAISE_APPLICATION_ERROR-proceduren findes i DBMS_STANDARD-pakken

Syntaks

raise_application_error (error_number, message [, TRUE])

Eksempel

/ * En trigger trg_emp_detail_chk oprettes. * / OPRET ELLER UDSKIFT TRIGGER trg_emp_detail_chk / * Udløsertimingen erklæres som FØR OPDATERING i tabellen MEDARBEJDERE. dagen for systemtiden er enten lørdag eller søndag eller ej. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') DANNE raise_application_error (-20000, 'Du er ikke autoriseret til at gøre enhver ændring i weekender !! ') / * Proceduren raise_application_error kaldes med den første parameterværdi som -20000 og den anden parameter med en standardtekst, der angiver, at brugeren ikke er autoriseret til at foretage nogen ændringer i weekenden. * / SLUT HVIS SLUT

Med dette kommer vi til slutningen af ​​denne artikel om “Undtagelseshåndtering i PL / SQL”. Jeg håber, dette emne forstås godt og hjalp dig. Prøv at skrive dine egne koder og inkorporer metoderne forklaret i denne artikel.

Hvis du vil blive uddannet af fagfolk i denne teknologi, kan du vælge struktureret træning fra edureka! Tjek dette af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Dette kursus træner dig om kernekoncepter og avancerede værktøjer og teknikker til at styre data og administrere MySQL-databasen. Det inkluderer praktisk indlæring om begreber som MySQL Workbench, MySQL Server, Data Modeling, MySQL Connector, Database Design, MySQL Command line, MySQL Funktioner osv. Slutningen af ​​træningen vil du være i stand til at oprette og administrere din egen MySQL Database og administrere data.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'Undtagelseshåndtering i PL / SQL' -artikel, så vender vi tilbage til dig hurtigst muligt.