sql >> Database >  >> RDS >> Oracle

Declareer door gebruiker gedefinieerde uitzondering met behulp van de RAISE_APPLICATION_ERROR-methode in Oracle Database

Zoals besproken in de inleiding tot het afhandelen van PL/SQL-uitzonderingen, zijn er drie manieren om door de gebruiker gedefinieerde uitzonderingen te declareren in Oracle PL/SQL. Van die drie hebben we de eerste manier al besproken en geleerd in de vorige tutorial. Vandaag gaan we in deze blog een stap verder en zien we de tweede manier om een ​​door de gebruiker gedefinieerde uitzondering te declareren en leren we hoe we een door de gebruiker gedefinieerde uitzondering kunnen declareren met behulp van de RAISE_APPLICATION_ERROR-methode.

Wat is de RAISE_APPLICATION_ERROR-methode?

RAISE APPLICATION ERROR is een opgeslagen procedure die is ingebouwd in Oracle-software. Met deze procedure kunt u een foutnummer koppelen aan het aangepaste foutbericht. Door zowel het foutnummer als het aangepaste foutbericht te combineren, kunt u een foutreeks samenstellen die lijkt op de standaard foutreeksen die door de Oracle-engine worden weergegeven wanneer er een fout optreedt.

Hoeveel fouten kunnen we genereren met de RAISE_APPLICATION_ERROR-procedure?

Met de RAISE_APPLICATION_ERROR-procedure kunnen we onze fouten nummeren van -20.000 tot -20.999, dus we kunnen zeggen dat we met de RAISE_APPLICATION_ERROR-procedure 1000 fouten kunnen genereren.

Raise_application_error maakt deel uit van welk pakket?

Je kunt de RAISE_APPLICATION_ERROR procedure vinden in het DBMS_STANDARD pakket.

Syntaxis van Raise_Application_Error

raise_application_error (error_number, message [, {TRUE | FALSE}]);

Hier is het foutnummer een negatief geheel getal in het bereik van -20000.. -20999 en is het bericht een tekenreeks van maximaal 2048 bytes lang. Als de optionele derde parameter WAAR is, wordt de fout op de stapel van alle voorgaande fouten geplaatst. In het geval van de parameter FALSE (de standaard) vervangt de fout echter alle eerdere fouten. RAISE_APPLICATION_ERROR maakt deel uit van pakket DBMS_STANDARD en u hoeft geen referenties voor pakket STANDARD te kwalificeren. 

Voorbeeld van RAISE_APPLICATION_ERROR procedure

In het volgende voorbeeld nemen we een invoer van numeriek datatype van de gebruiker en controleren of deze 18 of hoger is. Als dit niet het geval is, wordt de door de gebruiker gedefinieerde fout, die we zullen declareren, naar voren gebracht, anders zal de normale uitvoering van het programma plaatsvinden.

Stap1:Zet de serveruitgang aan

Als we het resultaat willen zien dat wordt geretourneerd door het PL/SQL-programma op het standaard uitvoerscherm, dan moeten we de serveruitvoer 'aan' zetten die standaard is ingesteld op 'uit' voor de sessie.

SET SERVEROUTPUT ON;

Stap 2:Gebruikersinvoer verwerken

Hoewel we de waarden in onze code kunnen vastleggen zoals we deden in de laatste tutorial, maar het is niet zo leuk. Om de code dynamischer te maken, besloot ik deze keer de invoer door de gebruiker te accepteren door hen de waarde te laten invoeren in een pop-upvenster met een aangepast bericht erop.

We kunnen de invoer gebruiken met behulp van een pop-upvenster met een aangepast bericht erop afgedrukt met behulp van de opdracht ACCEPT in Oracle PL/SQL.

ACCEPT var_age NUMBER PROMPT 'What is your age?';

De opdracht begint met het trefwoord accept gevolgd door de naam van de variabele en het gegevenstype. In ons geval is de naam var_age en het datatype NUMBER. Dat is de eerste helft van de verklaring. Dit deel zal ons helpen bij het opslaan van de invoerwaarde. De andere helft van de verklaring is verantwoordelijk voor het afdrukken van het aangepaste bericht in de pop-upbox. Met behulp van het trefwoord PROMPT dat direct achter het datatype van de variabele staat, kunt u elke gewenste string specificeren die u op uw pop-upvenster wilt afdrukken. In ons geval is dit aangepaste bericht 'Wat is uw leeftijd?'

Als je wilt dat ik een uitgebreide tutorial maak waarin het ACCEPT-commando in detail wordt uitgelegd, deel deze blog dan met de hashtag #RebellionRider. Je kunt me ook schrijven op mijn twitter @RebellionRider.

Stap 3:Variabele declareren

DECLARE
  age   NUMBER := &var_age;

Vanwege de reikwijdtebeperking kunnen we de waarde die is opgeslagen in de variabele die we in het accept-commando hebben gebruikt, niet gebruiken. Dit betekent dat we die waarde niet rechtstreeks in ons PL/SQL-programma kunnen gebruiken. We kunnen dit probleem oplossen door de waarde die is opgeslagen in de variabele var_age toe te wijzen aan een variabele die lokaal is in het PL/SQL-blok. Dat is precies wat we in het bovenstaande deel van de code hebben gedaan.

In het bovenstaande codesegment hebben we een lokale variabele met de naam 'leeftijd' gedeclareerd en de waarde toegewezen die is opgeslagen in de variabele var_age met behulp van de toewijzingsoperator.

Stap 4:Declareer de door de gebruiker gedefinieerde uitzondering met behulp van de RAISE_APPLICATION_ERROR procedure

BEGIN
  IF age < 18 THEN
   RAISE_APPLICATION_ERROR (-20008, 'you should be 18 or above for the DRINK!');
  END IF;

Hier in dit codesegment hebben we de door de gebruiker gedefinieerde uitzondering gedeclareerd met behulp van de RAISE_APPLICATION_ERROR-procedure. Deze procedure wordt aangeroepen met behulp van twee parameters. In welke eerste parameter het negatieve getal is dat in mijn geval -20008 is en het tweede getal een string is die wordt weergegeven als dezelfde fout optreedt.

De vraag is nu wanneer deze fout optreedt?

Zoals u kunt zien, is de code ingesloten in een IF-THEN voorwaardelijk controleblok dat ervoor zorgt dat de fout alleen wordt verhoogd als de leeftijd van de gebruiker minder dan 18 jaar is.

Stap 5:Uitvoerbare instructie

DBMS_OUTPUT.PUT_LINE('Sure, What would you like to have?');

Uitvoerbare instructies zijn instructies die worden gecompileerd en uitgevoerd wanneer er geen fout is en het programma een normale uitvoeringsstroom heeft. Om de code eenvoudig en gemakkelijk te begrijpen te maken, heb ik slechts een enkele instructie geschreven, de DBMS OUTPUT-instructie.

Stap 6:Schrijf de Exception-handler

Nu we zowel de door de gebruiker gedefinieerde uitzondering hebben gedeclareerd als verhoogd, moeten we er de uitzonderingshandler voor schrijven. Zoals gezegd in de vorige PL/SQL-tutorial, specificeren we in de sectie Exception Handler wat er zal gebeuren wanneer de fout die je hebt gegenereerd, wordt geactiveerd.

EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/

In deze sectie over het afhandelen van uitzonderingen heb ik een SQLERRM-functie aangeroepen met behulp van de DBMS OUTPUT-instructie. Dit is een hulpprogramma dat door Oracle wordt geleverd en dat de foutmelding voor de laatst opgetreden uitzondering ophaalt.

Laten we al deze kleine stukjes code samenvoegen tot één groot programma.

Door de gebruiker gedefinieerde uitzondering met behulp van de 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;
/ 

Dit is een korte maar beschrijvende tutorial over het declareren van een door de gebruiker gedefinieerde uitzondering met behulp van de Raise_Application_Error-procedure in Oracle Database. Hopelijk heb je iets nieuws geleerd en genoten van het lezen. Je kunt anderen helpen bij het leren en mij en mijn kanaal helpen groeien door deze blog te delen op je sociale media. Bedankt en een fijne dag verder!


  1. Hoe orakelindexen kiezen en optimaliseren?

  2. Lijst met datum- en tijdfuncties in SQL Server (T-SQL)

  3. Waarom gegevensback-ups belangrijk zijn voor uw organisatie

  4. SQLAlchemy:filteren op waarden die zijn opgeslagen in de geneste lijst van het JSONB-veld