Lär dig hur du hanterar undantag i PL / SQL



Den här artikeln är en omfattande guide om hur man utför undantagshantering i PL / SQL genom att diskutera olika typer av undantag som erbjuds i PL / SQL.

Om du är programmerare kanske du känner till begreppet undantagshantering är en integrerad del av alla . Eftersom fel är oundvikliga och till och med de smartaste av oss kan göra misstag när vi skriver kod måste vi känna till hur vi ska hantera dem. I den här artikeln kommer vi att lära oss särskilt om undantagshantering i PL / SQL.

SQL-undantagshantering i PL / SQL-EdurekaNedan följer ämnena i denna artikel:





Vad är ett undantag?

Alla onormala tillstånd eller händelser som avbryter det normala flödet av våra programinstruktioner vid körning eller i enkla ord ett undantag är ett fel.

Syntax för undantagshantering i PL / SQL

FÖRKLARA BÖRJA UNDANTAG NÄR undantag1 SÄND undantag1-hanterings-uttalanden NÄR undantag2 DÄN-undantag2-hanterings-uttalanden NÄR undantag3 DÄN undantag3-hanterings-uttalanden ........ NÄR andra DAN undantag3-hanterings-uttalanden SLUT

Här kan vi lista upp så många undantag som vi vill hantera. Standardundantaget hanteras med 'NÄR andra DAN'



hur man använder tablå public

Exempel på undantagshantering i PL / SQL

Programmet nedan visar namnet och adressen till en student vars ID ges. Eftersom det inte finns någon elev med ID-värde 8 i vår databas, höjer programmet körtidsundantaget NO_DATA_FOUND, som fångas i EXCEPTION-blocket.

DEKLARERA 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 ('Plats:' || s_loc) UNDANTAG NÄR ingen_data_ hittade DÄN dbms_output.put_line ('Ingen sådan student!') NÄR andra DAN dbms_output.put_line ('Oj, fel!') SLUT

Produktion

Ingen sådan student! PL / SQL-proceduren har slutförts.

Här kan vi lista upp så många undantag som vi vill hantera. Standardundantaget hanteras med ' NÄR andra SÅ ''

Typer av undantag i PL / SQL

  • System definierat
  • Användaren trotsade

Nästa i denna artikel om undantagshantering i PL / SQL , låt oss diskutera om båda dessa typer i detalj.



System definierat

Dessa undantag definieras och underhålls implicit av Oracle-servern och definieras huvudsakligen i Oracle Standard Package. När ett undantag förekommer i programmet, matchar Oracle-servern och identifierar lämpligt undantag från den tillgängliga uppsättningen undantag som finns i Oracle-standardpaketet. I grund och botten är dessa undantag fördefinierade i PL / SQL som höjs NÄR en viss databasregel bryts .

De Systemdefinierade undantag delas vidare in i två kategorier:

  • Namngivna systemundantag
  • Namnlösa systemundantag

Namngivna systemundantag

De namngivna PL / SQL-undantagen är namnges i standardpaketet för PL / SQL , därför behöver utvecklaren inte definiera PL / SQL-undantagen i sin kod. PL / SQL ger många fördefinierade namngivna undantag som körs när någon databasregel bryts av ett program. Följande tabell listar några av de viktiga fördefinierade undantagen och minus

Undantag Oracle-fel SQLCODE Beskrivning
ACCESS_INTO_NULL06530-6530Det höjs när ett null-objekt automatiskt tilldelas ett värde.
CASE_NOT_FOUND06592-6592Det tas upp när inget av valen i WHEN-klausulen om a CASE-uttalande har valts och det finns ingen ELSE-klausul.
COLLECTION_IS_NULL06531-6531Det tas upp när ett program försöker tillämpa andra insamlingsmetoder än EXISTS på en oinitialiserad kapslad tabell eller varray, eller om programmet försöker tilldela värden till elementen i en oinitialiserad kapslad tabell eller varray.
DUP_VAL_ON_INDEX00001-ettDet höjs när dubbla värden försöker lagras i en kolumn med ett unikt index.
INVALID_CURSOR01001-1001Den höjs när man försöker göra en marköråtgärd som inte är tillåten, till exempel att stänga en oöppnad markör.
OGILTIGT NUMMER01722-1722Det höjs när konverteringen av en teckensträng till ett nummer misslyckas eftersom strängen inte representerar ett giltigt nummer.
LOGIN_DENIED01017-1017Det tas upp när ett program försöker logga in på databasen med ett ogiltigt användarnamn eller lösenord.
INGEN INFORMATION HITTAD01403+100Det höjs när ett SELECT INTO-uttalande inte returnerar några rader.
NOT_LOGGED_ON01012-1012Det tas upp när ett databassamtal utfärdas utan att vara anslutet till databasen.
PROGRAM_ERROR06501-6501Det tas upp när PL / SQL har ett internt problem.
ROWTYPE_MISMATCH06504-6504Det höjs när en markör hämtar värde i en variabel med inkompatibel datatyp.
SELF_IS_NULL30625-30625Den höjs när en medlemsmetod åberopas, men förekomsten av objekttypen initialiserades inte.
STORAGE_ERROR06500-6500Det tas upp när PL / SQL slut på minne eller minnet var skadat.
TOO_MANY_ROWS01422-1422Det höjs när ett SELECT INTO-uttalande returnerar mer än en rad.
VALUE_ERROR06502-6502Det tas upp när ett aritmetik-, omvandlings-, trunkerings- eller storleksbegränsningsfel uppstår.
ZERO_DIVIDE014761476Det höjs när man försöker dela ett tal med noll.

Exempel

SKAPA ELLER BYT FÖRFARANDE add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) IS BEGIN INSERT IN student (student _id, student _name) VÄRDEN (student _id_in, student _name_in) UNDANTAG NÄR DUP_VAL_ON_INDEX DAN höger_applikation_ ) NÄR ANDRA DAN höjer_application_error (-20002, 'Ett fel inträffade.') SLUT

Gå vidare i den här artikeln om undantagshantering i PL / SQL, låt oss förstå vad som är namngivna systemundantag.

Namnlösa systemundantag

Systemundantagen för vilka Oracle inte har något namn kallas namnlösa systemundantag. Dessa undantag förekommer inte ofta och skrivs med en kod och ett tillhörande meddelande.

Det finns i princip två sätt att hantera namngivna systemundantag:

1. Använda WHEN ANDERS undantagshanterare

2. Associera undantagskoden till ett namn och använda den som ett namngivet undantag.

Några steg som följs för namngivna systemundantag är:

  • Höj dem implicit.
  • Om de inte hanteras i 'NÄR andra' måste de hanteras uttryckligen.
  • För att hantera undantaget uttryckligen kan de deklareras med Pragma EXCEPTION_INIT och hanteras genom att referera till det användardefinierade undantagsnamnet i undantagsavsnittet.

Ett exempel på hantering av namngivna undantag med hjälp av Pragma EXCEPTION_INIT ges senare i artikeln. Gå vidare i den här artikeln om undantagshantering i PL / SQL, låt oss förstå de användardefinierade excetpionerna.

Användardefinierad

Som alla andra programmeringsspråk, tillåter Oracle dig också att deklarera annons implementera dina egna undantag. Till skillnad från systemdefinierade undantag tas dessa undantag uttryckligen upp i PL / SQL-blocket.

Steg för att deklarera användardefinierade undantag i Oracle-databasen

Vi kan definiera användardefinierade undantag i Oracle-databasen på följande tre sätt:

  • Använd variabel av typen EXCEPTION

Här kan vi deklarera ett användardefinierat undantag genom att deklarera variabeln EXCEPTION data typ i vår kod och höja den uttryckligen i vårt program med RAISE-uttalande.

  • Med PRAGMA EXCEPTION_INIT-funktionen

Vi kan definiera ett icke fördefinierat felnummer med variabeln EXCEPTION datatyp

  • Med RAISE_APPLICATION_ERROR-metoden

Med den här metoden kan vi förklara ett användardefinierat undantag med vårt eget anpassade felnummer och meddelande.

Hittills har du kanske fått en grov uppfattning om hur vi kan höja användardefinierade undantag i PL / SQL. Vi kommer att lära oss om var och en av de ovannämnda metoderna med exempel längre i denna artikel om undantagshantering i PL / SQL.

vad är en buffrad läsare

Nästa i den här artikeln, låt oss fortsätta med demonstrationerna av användardefinierad undantagshantering.

Demonstration av användardefinierade undantag

Gå vidare i den här artikeln om undantagshantering i PL / SQL, låt oss förstå hur man använder variabeln av typen EXCEPTION.

Använd variabel av typen EXCEPTION

Processen att deklarera användardefinierat undantag är indelat i tre delar och dessa tre delar är:

  • Deklarera en datatyp med variabelt undantag
  • Höj undantaget
  • Hantera undantaget

Låt oss skriva en kod för att visa ovanstående steg i detalj.

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

I ovanstående deklarationsblock har vi fyra variabler, varav de första tre är datatypvariabler med normalt antal och den fjärde som är ex_DivZero är den speciella undantaget datatypvariabeln. Den fjärde är vårt användardefinierade undantag.

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

Ovanstående exekveringsdel av detta anonyma block kommer endast att agera när delaren är 0. Om delaren är noll som i vårt fall kommer felet att höjas och kontrollen av programmet hoppar över alla nästa steg och kommer att leta efter matchande undantagshanterare. Om det hittar någon annan, kommer den att utföra åtgärden i enlighet med detta, annars kommer det antingen att avsluta programmet eller uppmana oss med ett obehandlat systemdefinierat fel.

UNDANTAG NÄR ex_DivZero DAN DBMS_OUTPUT.PUT_LINE (‘FEL, delaren kan inte vara noll’)

Detta är undantagshanteraren. Så snart användaren anger divisorn som 0 kommer meddelandesträngen ovan att uppmanas.

Slutlig kod:

DEKLARER var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('resultat_' resultat = '| = 0 HÖGA DAN ex-DivZero SLUT OM Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Resultat =' || var_result) END

Gå vidare i den här artikeln om undantagshantering i PL / SQL, låt oss förstå hur man använder metoden PRAGMA_EXCEPTION_INIT.

vad är en daemon-tråd

Med PRAGMA EXCEPTION_INIT-funktionen

I PRAGMA EXCEPTION_INIT-funktion, ett undantagsnamn är associerat med ett Oracle-felnummer. Det här namnet kan användas för att designa undantagshanteraren för felet.För stora projekt med många användardefinierade fel är PRAGMA EXCEPTION_INIT den mest användbara och lämpliga metoden.

Syntax:

PRAGMA EXCEPTION_INIT (exception_name, -Oracle_error_number)

Exempel

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Någon åtgärd som orsakar ett ORA-00060-fel EXCEPTION NÄR deadlock_detected THEN NULL - hantera felet SLUT

PRAGMA EXCEPTION_INIT ber kompilatorn att associera ett undantagsnamn till ett Oracle-felnummer som nämnts tidigare. Det låter dig hänvisa till alla interna undantag med namn och skriva en specifik hanterare för det. När du ser en felstapel eller en sekvens av felmeddelanden är den ovanpå den som kan fångas och hanteras.

Gå vidare i den här artikeln om undantagshantering i PL / SQL, låt oss förstå hur vi använder metoden RAISE_APPLICATION_ERROR.

Med RAISE_APPLICATION_ERROR-metoden

Det är ett förfarande som medföljer oracle-programvaran. Med den här proceduren kan vi associera ett felnummer med ett anpassat felmeddelande. Genom att kombinera både felnumret och det anpassade felmeddelandet kan en felsträng komponeras som liknar de standardfelsträngar som visas av oracle när ett fel påträffas. RAISE_APPLICATION_ERROR-proceduren finns i DBMS_STANDARD-paketet

Syntax

raise_application_error (felnummer, meddelande [, TRUE])

Exempel

/ * En utlösare trg_emp_detail_chk skapas. * / SKAPA ELLER Byt ut TRIGGER trg_emp_detail_chk / * Utlösningstimingen deklareras som INNAN UPPDATERING i tabellen MEDARBETARE. * / Innan UPPDATERING PÅ anställda FÖRKLARAR tillståndet nekad EXCEPTION BEGIN / * Start av IF-tillståndet dagen för systemtiden är antingen lördag eller söndag eller inte. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday,' Sunday ') THEN raise_application_error (-20000,' Du är inte behörig att göra någon ändring på helgerna !! ') / * Proceduren raise_application_error anropas med det första parametervärdet som -20000 och den andra parametern med en standardtext som anger att användaren inte har rätt att göra någon ändring på helgerna. * / SLUT OM SLUT

Med detta kommer vi till slutet av denna artikel om ”Undantagshantering i PL / SQL”. Jag hoppas att det här ämnet förstås väl och hjälpte dig. Försök att skriva dina egna koder och införliva metoderna som förklaras i den här artikeln.

Om du vill bli utbildad av proffs i denna teknik kan du välja strukturerad utbildning från edureka! Kolla in det här av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Den här kursen tränar dig på kärnkoncepten och avancerade verktyg och tekniker för att hantera data och administrera MySQL-databasen. Det inkluderar praktisk inlärning av begrepp som MySQL Workbench, MySQL Server, datamodellering, MySQL-anslutning, databasdesign, MySQL-kommandorad, MySQL-funktioner etc. I slutet av utbildningen kommer du att kunna skapa och administrera din egen MySQL-databas och hantera data.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna artikel om 'Undantagshantering i PL / SQL' så återkommer vi till dig så snart som möjligt.