Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Deklarieren Sie eine benutzerdefinierte Ausnahme mit der Methode RAISE_APPLICATION_ERROR in der Oracle-Datenbank

Wie in der Einführung in die PL/SQL-Ausnahmebehandlung besprochen, gibt es drei Möglichkeiten, benutzerdefinierte Ausnahmen in Oracle PL/SQL zu deklarieren. Unter diesen dreien haben wir bereits den ersten Weg im vorherigen Tutorial besprochen und gelernt. Heute werden wir in diesem Blog einen Schritt voraus gehen und die zweite Möglichkeit zum Deklarieren einer benutzerdefinierten Ausnahme sehen und lernen, wie eine benutzerdefinierte Ausnahme mit der RAISE_APPLICATION_ERROR-Methode deklariert wird.

Was ist die RAISE_APPLICATION_ERROR-Methode?

RAISE APPLICATION ERROR ist eine gespeicherte Prozedur, die in die Oracle-Software integriert ist. Mit diesem Verfahren können Sie der benutzerdefinierten Fehlermeldung eine Fehlernummer zuordnen. Durch Kombinieren sowohl der Fehlernummer als auch der benutzerdefinierten Fehlermeldung können Sie eine Fehlerzeichenfolge zusammenstellen, die ähnlich aussieht wie die Standardfehlerzeichenfolgen, die von der Oracle-Engine angezeigt werden, wenn ein Fehler auftritt.

Wie viele Fehler können wir mit der RAISE_APPLICATION_ERROR-Prozedur generieren?

Die RAISE_APPLICATION_ERROR-Prozedur ermöglicht es uns, unsere Fehler von -20.000 bis -20.999 zu nummerieren, sodass wir sagen können, dass wir mit der RAISE_APPLICATION_ERROR-Prozedur 1000 Fehler generieren können.

Raise_application_error ist Teil welchen Pakets?

Sie finden die Prozedur RAISE_APPLICATION_ERROR im Paket DBMS_STANDARD.

Syntax von Raise_Application_Error

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

Hier ist die error_number eine negative Ganzzahl im Bereich von -20000 bis -20999 und die Meldung ist eine bis zu 2048 Byte lange Zeichenfolge. Falls der optionale dritte Parameter TRUE ist, wird der Fehler auf den Stapel aller vorherigen Fehler gelegt. Im Falle des Parameters FALSCH (Standardeinstellung) ersetzt der Fehler jedoch alle vorherigen Fehler. RAISE_APPLICATION_ERROR ist Teil des Pakets DBMS_STANDARD und Sie müssen keine Verweise auf das Paket STANDARD qualifizieren. 

Beispiel für die RAISE_APPLICATION_ERROR-Prozedur

Im folgenden Beispiel nehmen wir eine Eingabe des numerischen Datentyps vom Benutzer und prüfen, ob sie 18 oder höher ist. Wenn dies nicht der Fall ist, wird der benutzerdefinierte Fehler ausgelöst, den wir deklarieren werden, andernfalls gibt es den normalen Ausführungsfluss des Programms.

Schritt 1:Stellen Sie die Serverausgabe ein

Wenn wir das vom PL/SQL-Programm zurückgegebene Ergebnis auf dem Standardausgabebildschirm sehen möchten, müssen wir die Serverausgabe auf „on“ setzen, die standardmäßig für die Sitzung auf „off“ gesetzt ist.

SET SERVEROUTPUT ON;

Schritt 2:Benutzereingaben entgegennehmen

Obwohl wir die Werte in unserem Code fest verdrahten können, wie wir es im letzten Tutorial getan haben, macht es nicht so viel Spaß. Um den Code dynamischer zu gestalten, habe ich mich entschieden, diesmal die Eingabe des Benutzers zu akzeptieren, indem ich ihn den Wert in ein Popup-Feld mit einer darauf gedruckten benutzerdefinierten Nachricht eingeben ließ.

Wir können die Eingabe über ein Popup-Fenster mit einer darauf gedruckten benutzerdefinierten Nachricht mit dem ACCEPT-Befehl in Oracle PL/SQL übernehmen.

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

Der Befehl beginnt mit dem Schlüsselwort accept, gefolgt vom Namen der Variablen und ihrem Datentyp. In unserem Fall ist der Name var_age und der Datentyp NUMBER. Das ist die erste Hälfte der Aussage. Dieser Teil hilft uns beim Speichern des Eingabewerts. Die andere Hälfte des Kontoauszugs ist für das Drucken der benutzerdefinierten Nachricht auf dem Popup-Feld verantwortlich. Mit dem Schlüsselwort PROMPT, das direkt nach dem Datentyp der Variablen steht, können Sie eine beliebige Zeichenfolge angeben, die Sie in Ihrem Popup-Fenster drucken möchten. In unserem Fall lautet diese benutzerdefinierte Nachricht „Wie alt sind Sie?“

Wenn Sie möchten, dass ich ein ausführliches Tutorial mache, das den ACCEPT-Befehl im Detail erklärt, dann teilen Sie diesen Blog mit dem Hashtag #RebellionRider. Du kannst mir auch auf meinem Twitter @RebellionRider schreiben.

Schritt 3:Variable deklarieren

DECLARE
  age   NUMBER := &var_age;

Aufgrund der Bereichsbeschränkung können wir den in der Variablen gespeicherten Wert, den wir im Accept-Befehl verwendet haben, nicht verwenden. Das bedeutet, dass wir diesen Wert nicht direkt in unserem PL/SQL-Programm verwenden können. Wir können dieses Problem lösen, indem wir den Wert, der in der Variablen var_age gespeichert wurde, einer Variablen zuweisen, die für den PL/SQL-Block lokal ist. Genau das haben wir im obigen Abschnitt des Codes getan.

Im obigen Codesegment haben wir eine lokale Variable mit dem Namen „age“ deklariert und den in der Variablen var_age gespeicherten Wert mithilfe des Zuweisungsoperators zugewiesen.

Schritt 4:Deklarieren Sie die benutzerdefinierte Ausnahme mit der Prozedur RAISE_APPLICATION_ERROR

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

Hier in diesem Codesegment haben wir die benutzerdefinierte Ausnahme mit der Prozedur RAISE_APPLICATION_ERROR deklariert. Diese Prozedur wird mit zwei Parametern aufgerufen. Wobei der erste Parameter die negative Zahl ist, die in meinem Fall -20008 ist, und die zweite Zahl ein String ist, der angezeigt wird, wenn der gleiche Fehler auftritt.

Nun stellt sich die Frage, wann tritt dieser Fehler auf?

Wie Sie sehen können, ist der Code in einem bedingten IF-THEN-Kontrollblock eingeschlossen, der sicherstellt, dass der Fehler nur ausgelöst wird, wenn das Alter des Benutzers weniger als 18 Jahre beträgt.

Schritt 5:Ausführbare Anweisung

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

Ausführbare Anweisungen sind diejenigen, die kompiliert und ausgeführt werden, wenn kein Fehler vorliegt und das Programm einen normalen Ausführungsfluss hat. Um den Code einfach und leicht verständlich zu machen, habe ich nur eine einzelne Anweisung geschrieben, die die DBMS OUTPUT-Anweisung ist.

Schritt 6:Schreiben Sie den Ausnahmehandler

Nachdem wir die benutzerdefinierte Ausnahme deklariert und ausgelöst haben, müssen wir als Nächstes den Ausnahmehandler dafür schreiben. Wie im vorherigen PL/SQL-Tutorial gesagt, geben wir im Abschnitt Ausnahmebehandlung an, was passieren wird, wenn der von Ihnen ausgelöste Fehler ausgelöst wird.

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

In diesem Abschnitt zur Behandlung von Ausnahmen habe ich eine SQLERRM-Funktion mit der DBMS OUTPUT-Anweisung aufgerufen. Dies ist eine von Oracle bereitgestellte Hilfsfunktion, die die Fehlermeldung für die zuletzt aufgetretene Ausnahme abruft.

Lassen Sie uns all diese kleinen Code-Blöcke in ein großes Programm kompilieren.

Benutzerdefinierte Ausnahme mit Raise_Application_Error-Prozedur

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;
/ 

Dies ist ein kurzes, aber beschreibendes Tutorial zum Deklarieren einer benutzerdefinierten Ausnahme mithilfe der Raise_Application_Error-Prozedur in der Oracle-Datenbank. Ich hoffe, Sie haben etwas Neues gelernt und das Lesen genossen. Sie können anderen beim Lernen helfen und mir und meinem Kanal helfen, zu wachsen, indem Sie diesen Blog in Ihren sozialen Medien teilen. Vielen Dank und einen schönen Tag!