Som diskuterats i introduktionen till PL/SQL-undantagshantering finns det tre sätt att deklarera användardefinierade undantag i Oracle PL/SQL. Bland dessa tre har vi redan diskuterat och lärt oss det första sättet i den tidigare handledningen. Idag i den här bloggen kommer vi att ta ett steg före och se det andra sättet att förklara användardefinierat undantag och lära oss hur man förklarar användardefinierat undantag med metoden RAISE_APPLICATION_ERROR.
Vad är metoden RAISE_APPLICATION_ERROR?
RAISE APPLICATION ERROR är en lagrad procedur som är inbyggd i Oracle-programvaran. Med den här proceduren kan du koppla ett felnummer till det anpassade felmeddelandet. Genom att kombinera både felnumret och det anpassade felmeddelandet kan du skapa en felsträng som liknar de standardfelsträngar som visas av Oracle-motorn när ett fel uppstår.
Hur många fel kan vi generera med RAISE_APPLICATION_ERROR-proceduren?
RAISE_APPLICATION_ERROR-proceduren tillåter oss att numrera våra fel från -20 000 till -20 999, så vi kan säga att med RAISE_APPLICATION_ERROR-proceduren kan vi generera 1000 fel.
Raise_application_error är en del av vilket paket?
Du kan hitta RAISE_APPLICATION_ERROR-proceduren i DBMS_STANDARD-paketet.
Syntax för Raise_Application_Error
raise_application_error (error_number, message [, {TRUE | FALSE}]);
Här är error_number ett negativt heltal i intervallet -20000.. -20999 och meddelandet är en teckensträng på upp till 2048 byte lång. Om den valfria tredje parametern är TRUE, placeras felet på högen med alla tidigare fel. Men i händelse av FALSE (standardparametern) ersätter felet alla tidigare fel. RAISE_APPLICATION_ERROR är en del av paketet DBMS_STANDARD och du behöver inte kvalificera dig för referenser till paketet STANDARD.
Exempel på RAISE_APPLICATION_ERROR procedur
I följande exempel tar vi en inmatning av numerisk datatyp från användaren och kontrollerar om den är 18 eller högre. Om det inte är det kommer det användardefinierade felet, som vi kommer att förklara, att uppstå, annars kommer det att vara det normala körningsflödet av programmet.
Steg 1:Ställ in serverutgången på
Om vi vill se resultatet som returneras av PL/SQL-programmet på standardutgångsskärmen måste vi ställa in serverutgången "på" som som standard är inställd på "av" för sessionen.
SET SERVEROUTPUT ON;
Steg 2:Ta användarinput
Även om vi kan koppla värdena i vår kod som vi gjorde i förra handledningen, men det är inte så roligt. För att göra koden mer dynamisk bestämde jag mig för att acceptera inmatningen från användaren denna gång genom att låta dem ange värdet i en popup-ruta med ett anpassat meddelande tryckt på den.
Vi kan ta inmatningen med hjälp av en popup-ruta med ett anpassat meddelande tryckt med kommandot ACCEPT i Oracle PL/SQL.
ACCEPT var_age NUMBER PROMPT 'What is your age?';
Kommandot börjar med nyckelordet acceptera följt av namnet på variabeln och dess datatyp. I vårt fall är namnet var_age och datatypen är NUMBER. Det är den första hälften av uttalandet. Den här delen hjälper oss att lagra ingångsvärdet. Den andra halvan av uttalandet kommer att ansvara för att skriva ut det anpassade meddelandet på popup-rutan. Med hjälp av nyckelordet PROMPT som ligger precis efter variabelns datatyp kan du specificera vilken sträng som helst som du vill skriva ut på din popup-ruta. I vårt fall kommer detta anpassade meddelande att vara "Vad är din ålder?"
Om du vill att jag ska göra en omfattande handledning som förklarar ACCEPT-kommandot i detalj, dela den här bloggen med hashtaggen #RebellionRider. Du kan också skriva till mig på min twitter @RebellionRider.
Steg 3:Deklarera variabel
DECLARE age NUMBER := &var_age;
På grund av omfattningsbegränsningen kan vi inte använda värdet lagrat i variabeln som vi använde i acceptkommandot. Det betyder att vi inte kan använda det värdet direkt i vårt PL/SQL-program. Vi kan lösa detta problem genom att tilldela värdet som lagrades i variabeln var_age till en variabel som är lokal för PL/SQL-blocket. Det är precis vad vi gjorde i ovanstående segment av koden.
I ovanstående kodsegment deklarerade vi en lokal variabel med namnet 'ålder' och tilldelade värdet lagrat i variabeln var_age med hjälp av tilldelningsoperatorn.
Steg 4:Deklarera det användardefinierade undantaget genom att använda proceduren RAISE_APPLICATION_ERROR
BEGIN IF age < 18 THEN RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!'); END IF;
Här i detta kodsegment deklarerade vi det användardefinierade undantaget med RAISE_APPLICATION_ERROR-proceduren. Denna procedur kallas med två parametrar. I vilken första parameter är det negativa talet som i mitt fall är -20008 och det andra numret är en sträng som visas om samma fel inträffar.
Nu är frågan när detta fel kommer att inträffa?
Som du kan se är koden innesluten i ett OM-DÅ villkorligt kontrollblock som säkerställer att felet endast uppstår om användarens ålder är mindre än 18 år.
Steg 5:Körbar sats
DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');
Körbara satser är de som kompileras och körs när det inte finns något fel och programmet har ett normalt körningsflöde. För att göra koden enkel och lätt att förstå skrev jag bara en enskild sats som är DBMS OUTPUT-satsen.
Steg 6:Skriv undantagshanteraren
Nu när vi har deklarerat såväl som höjt det användardefinierade undantaget, måste vi skriva undantagshanteraren för det. Som sagt i föregående PL/SQL-handledning att vi i avsnittet Exception Handler specificerar vad som kommer att hända när felet som du tog upp kommer att utlösas.
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
I det här avsnittet om undantagshantering har jag anropat en SQLERRM-funktion som använder DBMS OUTPUT-satsen. Detta är en hjälpfunktion som tillhandahålls av Oracle som hämtar felmeddelandet för det senast inträffade undantaget.
Låt oss sammanställa alla dessa små kodbitar till ett stort program.
Användardefinierat undantag med hjälp av Raise_Application_Error-proceduren
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; /
Detta är en kort men beskrivande handledning om hur man deklarerar användardefinierat undantag med hjälp av Raise_Application_Error-proceduren i Oracle Database. Hoppas du lärde dig något nytt och tyckte om att läsa. Du kan hjälpa andra att lära och hjälpa mig och min kanal att växa genom att dela den här bloggen på dina sociala medier. Tack och ha en bra dag!