Wenn Sie ein Programmierer sind, sind Sie möglicherweise mit dem Konzept der Ausnahmebehandlung vertraut, das ein wesentlicher Bestandteil von jedem ist . Da Fehler unvermeidlich sind und selbst die klügsten von uns beim Schreiben von Code Fehler machen können, müssen wir mit dem Umgang damit vertraut sein. In diesem Artikel lernen wir insbesondere die Ausnahmebehandlung in PL / SQL kennen.
Nachfolgend sind die in diesem Artikel behandelten Themen aufgeführt:
Was ist eine Ausnahme?
Jeder ungewöhnliche Zustand oder jedes abnormale Ereignis, das den normalen Ablauf unserer Programmanweisungen zur Laufzeit oder in einfachen Worten eine Ausnahme unterbricht, ist ein Fehler.
Syntax der Ausnahmebehandlung in PL / SQL
DECLARE BEGIN EXCEPTION WENN Ausnahme1 DANN Ausnahme1-Handling-Anweisungen WENN Ausnahme2 DANN Ausnahme2-Handling-Anweisungen WENN Ausnahme3 DANN Ausnahme3-Handling-Anweisungen ........ WENN andere DANN Ausnahme3-Handling-Anweisungen ENDE
Hier können wir so viele Ausnahmen auflisten, wie wir behandeln möchten. Die Standardausnahme wird mit 'WENN andere DANN' behandelt.
Beispiel für die Ausnahmebehandlung in PL / SQL
Das folgende Programm zeigt den Namen und die Adresse eines Schülers an, dessen Ausweis angegeben ist. Da sich in unserer Datenbank kein Student mit dem ID-Wert 8 befindet, löst das Programm die Laufzeitausnahme NO_DATA_FOUND aus, die im EXCEPTION-Block erfasst wird.
DECLARE 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 student WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('Name:' || s_name) DBMS_OUTPUT .PUT_LINE ('Location:' || s_loc) AUSNAHME, WENN no_data_found THEN dbms_output.put_line ('Kein solcher Student!') WENN andere THEN dbms_output.put_line ('Ups, Fehler!') END
Ausgabe
Kein solcher Student! PL / SQL-Prozedur erfolgreich abgeschlossen.
Hier können wir so viele Ausnahmen auflisten, wie wir behandeln möchten. Die Standardausnahme wird mit ' WENN andere DANN '
Was ist die Funktion in SQL
Arten von Ausnahmen in PL / SQL
- System definiert
- Benutzer trotzt
Weiter in diesem Artikel zur Ausnahmebehandlung in PL / SQL Lassen Sie uns diese beiden Typen im Detail diskutieren.
System definiert
Diese Ausnahmen werden vom Oracle-Server implizit definiert und verwaltet und hauptsächlich im Oracle-Standardpaket definiert. Immer wenn eine Ausnahme innerhalb des Programms auftritt, stimmt der Oracle-Server mit der entsprechenden Ausnahme aus den verfügbaren Ausnahmen im Oracle-Standardpaket überein und identifiziert diese. Grundsätzlich sind diese Ausnahmen in vordefiniert PL / SQL was angehoben wird WENN eine bestimmte Datenbankregel verletzt wird .
Das Systemdefinierte Ausnahmen sind weiter in zwei Kategorien unterteilt:
- Benannte Systemausnahmen
- Unbenannte Systemausnahmen
Benannte Systemausnahmen
Die genannten PL / SQL-Ausnahmen sind im Standardpaket von PL / SQL benannt Daher muss der Entwickler die PL / SQL-Ausnahmen nicht in seinem Code definieren. PL / SQL bietet viele vordefinierte benannte Ausnahmen, die ausgeführt werden, wenn eine Datenbankregel von einem Programm verletzt wird. In der folgenden Tabelle sind einige der wichtigen vordefinierten Ausnahmen & Minus aufgeführt
Ausnahme | Oracle-Fehler | SQLCODE | Beschreibung |
ACCESS_INTO_NULL | 06530 | -6530 | Es wird ausgelöst, wenn einem Nullobjekt automatisch ein Wert zugewiesen wird. |
CASE_NOT_FOUND | 06592 | -6592 | Es wird ausgelöst, wenn keine der Auswahlmöglichkeiten in der WHEN-Klausel von a CASE-Anweisung ausgewählt ist und es keine ELSE-Klausel gibt. |
COLLECTION_IS_NULL | 06531 | -6531 | Es wird ausgelöst, wenn ein Programm versucht, andere Erfassungsmethoden als EXISTS auf eine nicht initialisierte verschachtelte Tabelle oder ein nicht initialisiertes Varray anzuwenden, oder wenn das Programm versucht, den Elementen einer nicht initialisierten verschachtelten Tabelle oder Varray Werte zuzuweisen. |
DUP_VAL_ON_INDEX | 00001 | -ein | Es wird ausgelöst, wenn versucht wird, doppelte Werte in einer Spalte mit einem eindeutigen Index zu speichern. |
INVALID_CURSOR | 01001 | -1001 | Es wird ausgelöst, wenn versucht wird, eine Cursoroperation auszuführen, die nicht zulässig ist, z. B. das Schließen eines ungeöffneten Cursors. |
UNGÜLTIGE NUMMER | 01722 | -1722 | Es wird ausgelöst, wenn die Konvertierung einer Zeichenfolge in eine Zahl fehlschlägt, da die Zeichenfolge keine gültige Zahl darstellt. |
LOGIN_DENIED | 01017 | -1017 | Es wird ausgelöst, wenn ein Programm versucht, sich mit einem ungültigen Benutzernamen oder Kennwort bei der Datenbank anzumelden. |
KEINE DATEN GEFUNDEN | 01403 | +100 | Es wird ausgelöst, wenn eine SELECT INTO-Anweisung keine Zeilen zurückgibt. |
NOT_LOGGED_ON | 01012 | -1012 | Es wird ausgelöst, wenn ein Datenbankaufruf ausgegeben wird, ohne mit der Datenbank verbunden zu sein. |
PROGRAM_ERROR | 06501 | -6501 | Es wird ausgelöst, wenn PL / SQL ein internes Problem hat. |
ROWTYPE_MISMATCH | 06504 | -6504 | Es wird ausgelöst, wenn ein Cursor einen Wert in einer Variablen mit inkompatiblem Datentyp abruft. |
SELF_IS_NULL | 30625 | -30625 | Es wird ausgelöst, wenn eine Mitgliedsmethode aufgerufen wird, die Instanz des Objekttyps jedoch nicht initialisiert wurde. |
STORAGE_ERROR | 06500 | -6500 | Es wird ausgelöst, wenn PL / SQL nicht genügend Speicher hat oder der Speicher beschädigt wurde. |
TOO_MANY_ROWS | 01422 | -1422 | Es wird ausgelöst, wenn eine SELECT INTO-Anweisung mehr als eine Zeile zurückgibt. |
VALUE_ERROR | 06502 | -6502 | Es wird ausgelöst, wenn ein Arithmetik-, Konvertierungs-, Kürzungs- oder Größenbeschränkungsfehler auftritt. |
ZERO_DIVIDE | 01476 | 1476 | Es wird ausgelöst, wenn versucht wird, eine Zahl durch Null zu teilen. |
Beispiel
VERFAHREN ERSTELLEN ODER ERSETZEN add_new_student (student _id_in IN NUMBER, student _name_in IN VARCHAR2) BEGINNEN EINFÜGEN IN student (student _id, student _name) VALUES (student _id_in, student _name_in) AUSNAHME BEI DUP_VAL_ON_INDEX ) WENN ANDERE DANN erhöhen_application_error (-20002, 'Ein Fehler ist aufgetreten.') ENDE
Lassen Sie uns in diesem Artikel zur Ausnahmebehandlung in PL / SQL verstehen, was unbenannte Systemausnahmen sind.
Unbenannte Systemausnahmen
Die Systemausnahmen, für die Oracle keinen Namen hat, werden als unbenannte Systemausnahmen bezeichnet. Diese Ausnahmen treten nicht häufig auf und werden mit einem Code und einer zugehörigen Nachricht geschrieben.
Grundsätzlich gibt es zwei Möglichkeiten, um unbenannte Systemausnahmen zu behandeln:
1. Verwenden des Ausnahmebehandlers WHEN OTHERS
2. Verknüpfen Sie den Ausnahmecode mit einem Namen und verwenden Sie ihn als benannte Ausnahme.
Einige Schritte für unbenannte Systemausnahmen sind:
- Erhöhen Sie sie implizit.
- Falls sie dann nicht in 'WENN Andere' behandelt werden, müssen sie explizit behandelt werden.
- Um die Ausnahme explizit zu behandeln, können sie mit Pragma EXCEPTION_INIT deklariert und durch Verweisen auf den benutzerdefinierten Ausnahmennamen im Ausnahmeabschnitt behandelt werden.
Ein Beispiel für die Behandlung unbenannter Ausnahmen mit Pragma EXCEPTION_INIT finden Sie weiter unten in diesem Artikel. Lassen Sie uns in diesem Artikel zur Ausnahmebehandlung in PL / SQL die benutzerdefinierten Ausnahmen verstehen.
Benutzerdefinierte
Wie in allen anderen Programmiersprachen können Sie in Oracle auch die Implementierung Ihrer eigenen Ausnahmen deklarieren. Im Gegensatz zu vom System definierten Ausnahmen werden diese Ausnahmen explizit im PL / SQL-Block ausgelöst.
Schritte zum Deklarieren benutzerdefinierter Ausnahmen in der Oracle-Datenbank
Wir können benutzerdefinierte Ausnahmen in der Oracle-Datenbank auf drei Arten definieren:
- Verwenden einer Variablen vom Typ EXCEPTION
Hier können wir eine benutzerdefinierte Ausnahme deklarieren, indem wir eine Variable von EXCEPTION deklarieren Datentyp in unserem Code und erhöhen Sie ihn explizit in unserem Programm mit der RAISE-Anweisung.
- Verwenden der Funktion PRAGMA EXCEPTION_INIT
Wir können eine nicht vordefinierte Fehlernummer mit der Variablen des Datentyps EXCEPTION definieren
- Verwenden der RAISE_APPLICATION_ERROR-Methode
Mit dieser Methode können wir eine benutzerdefinierte Ausnahme mit unserer eigenen benutzerdefinierten Fehlernummer und Meldung deklarieren.
Bis jetzt haben Sie vielleicht eine ungefähre Vorstellung davon, wie wir benutzerdefinierte Ausnahmen in PL / SQL auslösen können. In diesem Artikel erfahren Sie mehr über die oben genannten Methoden anhand von Beispielen zur Ausnahmebehandlung in PL / SQL.
Lassen Sie uns als Nächstes in diesem Artikel mit den Demonstrationen der benutzerdefinierten Ausnahmebehandlung fortfahren.
Demonstration benutzerdefinierter Ausnahmen
Lassen Sie uns in diesem Artikel über die Ausnahmebehandlung in PL / SQL verstehen, wie die Variable vom Typ EXCEPTION verwendet wird.
Verwenden einer Variablen vom Typ EXCEPTION
Das Deklarieren einer benutzerdefinierten Ausnahme ist in drei Teile unterteilt. Diese drei Teile sind:
- Deklarieren Sie einen Datentyp mit variabler Ausnahme
- Erhöhen Sie die Ausnahme
- Behandeln Sie die Ausnahme
Schreiben wir einen Code, um die obigen Schritte im Detail zu demonstrieren.
DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION
Im obigen Deklarationsblock haben wir vier Variablen, von denen die ersten drei Datentypvariablen mit normaler Anzahl sind und die vierte, ex_DivZero, die Datendypvariable mit Ausnahme ist. Die vierte ist unsere benutzerdefinierte Ausnahme.
DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION
Der obige Ausführungsteil dieses anonymen Blocks wird nur wirksam, wenn der Divisor 0 ist. Wenn der Divisor wie in unserem Fall Null ist, wird der Fehler ausgelöst und die Steuerung des Programms überspringt alle nächsten Schritte und sucht nach passenden Ausnahmebehandlungsroutinen. Wenn es einen anderen findet, führt es die Aktion entsprechend aus, andernfalls wird entweder das Programm beendet oder es wird ein nicht behandelter systemdefinierter Fehler angezeigt.
informatica Tutorial für Anfänger pdf kostenloser Download
AUSNAHME BEI ex_DivZero DANN DBMS_OUTPUT.PUT_LINE ('FEHLER, der Divisor kann nicht Null sein')
Dies ist der Ausnahmebehandler. Sobald der Benutzer den Divisor als 0 eingibt, wird die obige Nachrichtenzeichenfolge angezeigt.
Endgültiger Code:
DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero AUSNAHME BEGINNEN WENN var_divisor = 0 DANN ERHÖHEN ex-DivZero ENDE WENN Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_Lin ' = 0 DANN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END
Lassen Sie uns in diesem Artikel zur Ausnahmebehandlung in PL / SQL die Verwendung der PRAGMA_EXCEPTION_INIT-Methode verstehen.
Verwenden der Funktion PRAGMA EXCEPTION_INIT
In dem PRAGMA EXCEPTION_INIT-Funktion, ein Ausnahmename ist einer Oracle-Fehlernummer zugeordnet. Dieser Name kann beim Entwerfen des Ausnahmehandlers für den Fehler verwendet werden.Für große Projekte mit vielen benutzerdefinierten Fehlern ist PRAGMA EXCEPTION_INIT die nützlichste und geeignetste Methode.
Syntax:
PRAGMA EXCEPTION_INIT (Ausnahmenname, -Oracle_error_number)
Beispiel
DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - Eine Operation, die einen ORA-00060-Fehler verursacht. EXCEPTION WHEN deadlock_detected THEN NULL - Behandeln Sie den Fehler END
PRAGMA EXCEPTION_INIT weist den Compiler an, einen Ausnahmennamen mit einer Oracle-Fehlernummer zu verknüpfen, wie bereits erwähnt. Sie können auf jede interne Ausnahme mit Namen verweisen und einen bestimmten Handler dafür schreiben. Wenn Sie einen Fehlerstapel oder eine Folge von Fehlermeldungen sehen, ist die oberste diejenige, die abgefangen und behandelt werden kann.
Lassen Sie uns in diesem Artikel über die Ausnahmebehandlung in PL / SQL die Verwendung der RAISE_APPLICATION_ERROR-Methode verstehen.
Verwenden der RAISE_APPLICATION_ERROR-Methode
Es ist ein Verfahren, das in der Oracle-Software integriert ist. Mit diesem Verfahren können wir einer benutzerdefinierten Fehlermeldung eine Fehlernummer zuordnen. Durch Kombinieren der Fehlernummer und der benutzerdefinierten Fehlermeldung kann eine Fehlerzeichenfolge erstellt werden, die den Standardfehlerzeichenfolgen ähnelt, die von Oracle angezeigt werden, wenn ein Fehler auftritt. Die Prozedur RAISE_APPLICATION_ERROR befindet sich im Paket DBMS_STANDARD
Syntax
raise_application_error (error_number, message [, TRUE])
Beispiel
/ * Ein Trigger trg_emp_detail_chk wird erstellt. * / TRIGGER ERSTELLEN ODER ERSETZEN trg_emp_detail_chk / * Das Trigger-Timing wird in der Tabelle EMPLOYEES als BEFORE UPDATE deklariert. * / Vor UPDATE ON-Mitarbeitern DECLARE-Berechtigung_denied Tag der Systemzeit ist entweder Samstag oder Sonntag oder nicht. * / IF trim (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') THEN raise_application_error (-20000, 'Sie sind nicht dazu berechtigt Änderungen an den Wochenenden !! ') / * Die Prozedur raise_application_error wird mit dem ersten Parameterwert -20000 und dem zweiten Parameter mit einem Standardtext aufgerufen, der besagt, dass der Benutzer nicht berechtigt ist, Änderungen an den Wochenenden vorzunehmen. * / END IF END
Damit sind wir am Ende dieses Artikels zum Thema „Ausnahmebehandlung in PL / SQL“ angelangt. Ich hoffe, dieses Thema wird gut verstanden und hat Ihnen geholfen. Versuchen Sie, Ihre eigenen Codes zu schreiben und die in diesem Artikel erläuterten Methoden zu verwenden.
Wenn Sie sich von Fachleuten für diese Technologie schulen lassen möchten, können Sie sich für ein strukturiertes Training von edureka entscheiden! Schau dir das an von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Dieser Kurs schult Sie in den Kernkonzepten und fortgeschrittenen Tools und Techniken zum Verwalten von Daten und Verwalten der MySQL-Datenbank. Es umfasst praktische Informationen zu Konzepten wie MySQL Workbench, MySQL Server, Datenmodellierung, MySQL Connector, Datenbankdesign, MySQL-Befehlszeile, MySQL-Funktionen usw. Am Ende der Schulung können Sie Ihre eigene MySQL-Datenbank erstellen und verwalten und verwalten Daten.
Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Artikels „Ausnahmebehandlung in PL / SQL“. Wir werden uns so schnell wie möglich bei Ihnen melden.