Som diskuteret i introduktionen til PL/SQL-undtagelseshåndtering er der tre måder at erklære brugerdefinerede undtagelser på i Oracle PL/SQL. Blandt disse tre har vi allerede diskuteret og lært den første måde i den forrige tutorial. I dag i denne blog vil vi tage et skridt foran og se den anden måde at erklære en brugerdefineret undtagelse på og lære, hvordan man erklærer en brugerdefineret undtagelse ved hjælp af metoden RAISE_APPLICATION_ERROR.
Hvad er RAISE_APPLICATION_ERROR-metoden?
RAISE APPLICATION ERROR er en lagret procedure, som er indbygget i Oracle-software. Ved at bruge denne procedure kan du knytte et fejlnummer til den brugerdefinerede fejlmeddelelse. Ved at kombinere både fejlnummeret og den brugerdefinerede fejlmeddelelse kan du oprette en fejlstreng, der ligner de standardfejlstrenge, der vises af Oracle-motoren, når der opstår en fejl.
Hvor mange fejl kan vi generere ved hjælp af RAISE_APPLICATION_ERROR-proceduren?
RAISE_APPLICATION_ERROR procedure giver os mulighed for at nummerere vores fejl fra -20.000 til -20.999, så vi kan sige, at ved at bruge RAISE_APPLICATION_ERROR procedure kan vi generere 1000 fejl.
Raise_application_error er en del af hvilken pakke?
Du kan finde RAISE_APPLICATION_ERROR-proceduren i DBMS_STANDARD-pakken.
Syntaks for Raise_Application_Error
raise_application_error (error_number, message [, {TRUE | FALSE}]);
Her er error_number et negativt heltal i området -20000.. -20999, og meddelelsen er en tegnstreng på op til 2048 bytes lang. Hvis den valgfri tredje parameter er TRUE, placeres fejlen på bunken med alle de tidligere fejl. Men i tilfælde af FALSE (standardparameteren), erstatter fejlen alle tidligere fejl. RAISE_APPLICATION_ERROR er en del af pakken DBMS_STANDARD, og du behøver ikke at kvalificere referencer til pakken STANDARD.
Eksempel på RAISE_APPLICATION_ERROR-procedure
I det følgende eksempel vil vi tage et input af numerisk datatype fra brugeren og kontrollere, om det er 18 eller derover. Hvis det ikke er det, vil den brugerdefinerede fejl, som vi vil erklære, blive rejst, ellers vil der være den normale udførelse af programmet.
Trin 1:Indstil serveroutputtet til
Hvis vi ønsker at se resultatet returneret af PL/SQL-programmet på standardoutputskærmen, bliver vi nødt til at indstille serveroutputtet 'on', som som standard er sat til 'off' for sessionen.
SET SERVEROUTPUT ON;
Trin 2:Tag brugerinput
Selvom vi kan fastkoble værdierne i vores kode, som vi gjorde i den sidste tutorial, men det er ikke så sjovt. For at gøre koden mere dynamisk besluttede jeg at acceptere input fra bruger denne gang ved at lade dem indtaste værdien i en pop op-boks med en tilpasset besked trykt på den.
Vi kan tage input ved hjælp af pop-up boks med en tilpasset besked trykt på den ved hjælp af ACCEPT kommandoen i Oracle PL/SQL.
ACCEPT var_age NUMBER PROMPT 'What is your age?';
Kommandoen starter med nøgleordet accept efterfulgt af navnet på variablen og dens datatype. I vores tilfælde er navnet var_age, og datatypen er NUMBER. Det er første halvdel af udtalelsen. Denne del hjælper os med at gemme inputværdien. Den anden halvdel af erklæringen vil være ansvarlig for at udskrive den tilpassede besked på pop op-boksen. Ved at bruge søgeordet PROMPT, som er lige efter variablens datatype, kan du angive en hvilken som helst ønsket streng, som du ønsker udskrevet på din pop-up-boks. I vores tilfælde vil denne tilpassede besked være "Hvad er din alder?"
Hvis du vil have mig til at lave en omfattende tutorial, der forklarer ACCEPT-kommandoen i detaljer, så del denne blog ved hjælp af hashtagget #RebellionRider. Du kan også skrive til mig på min twitter @RebellionRider.
Trin 3:Angiv variabel
DECLARE age NUMBER := &var_age;
På grund af omfangsbegrænsningen kan vi ikke bruge værdien gemt i variablen, som vi brugte i accept-kommandoen. Det betyder, at vi ikke direkte kan bruge denne værdi i vores PL/SQL-program. Vi kan løse dette problem ved at tildele værdien, der blev gemt i variablen var_age, til en variabel, som er lokal for PL/SQL-blokken. Det er præcis, hvad vi gjorde i ovenstående segment af koden.
I ovenstående kodesegment erklærede vi en lokal variabel med navnet 'alder' og tildelte værdien gemt i variablen var_age ved hjælp af tildelingsoperatoren.
Trin 4:Erklær den brugerdefinerede undtagelse ved at bruge RAISE_APPLICATION_ERROR-proceduren
BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF;
Her i dette kodesegment erklærede vi den brugerdefinerede undtagelse ved hjælp af RAISE_APPLICATION_ERROR-proceduren. Denne procedure kaldes ved hjælp af to parametre. I hvilken første parameter er det negative tal, som i mit tilfælde er -20008, og det andet tal er en streng, der vises, hvis den samme fejl opstår.
Nu er spørgsmålet, hvornår vil denne fejl opstå?
Som du kan se, er koden indesluttet i en IF-THEN betinget kontrolblok, som sikrer, at fejlen kun vil blive rejst, hvis brugerens alder er under 18 år.
Trin 5:Eksekverbar erklæring
DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');
Eksekverbare sætninger er dem, der kompileres og køres, når der ikke er nogen fejl, og programmet har et normalt udførelsesflow. For at gøre koden enkel og let at forstå, har jeg lige skrevet en enkelt sætning, som er DBMS OUTPUT-sætningen.
Trin 6:Skriv undtagelsesbehandleren
Nu hvor vi har erklæret såvel som rejst den brugerdefinerede undtagelse, skal vi skrive undtagelsesbehandleren til den. Som sagt i den forrige PL/SQL-tutorial, specificerer vi i afsnittet Exception Handler, hvad der vil ske, når den fejl, du rejste, udløses.
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
I denne undtagelseshåndteringssektion har jeg kaldt en SQLERRM-funktion ved hjælp af DBMS OUTPUT-sætning. Dette er en hjælpefunktion leveret af Oracle, som henter fejlmeddelelsen for den sidst opståede undtagelse.
Lad os kompilere alle disse små bidder af kode i ét stort program.
Brugerdefineret undtagelse ved hjælp af Raise_Application_Error Procedure
SET SERVEROUTPUT ON; ACCEPT var_age NUMBER PROMPT 'What is yor age'; DECLARE age NUMBER := &var_age; BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF; DBMS_OUTPUT.PUT_LINE ('Sure, What would you like to have?'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); END; /
Dette er en kort, men beskrivende vejledning om, hvordan man erklærer en brugerdefineret undtagelse ved hjælp af Raise_Application_Error-proceduren i Oracle Database. Håber du har lært noget nyt og nydt at læse. Du kan hjælpe andre med at lære samt hjælpe mig og min kanal med at vokse ved at dele denne blog på dine sociale medier. Tak og god dag!