complete guide pl sql exception handling with examples
In diesem Lernprogramm werden die Behandlung von PL SQL-Ausnahmen und verwandte Konzepte wie Ausnahmetypen, benutzerdefinierte und systemdefinierte Ausnahmen, Auslösen einer Ausnahme usw. erläutert.
Im PL / SQL-Datetime-Format von PL / SQL-Serie Wir haben einige nützliche Funktionen rund um Datetime, Timestamp und Interval kennengelernt
In diesem Artikel wird die Ausnahmebehandlung in PL SQL erläutert. Außerdem werden wir die Vorteile von Ausnahmen untersuchen und herausfinden, wie sie ausgelöst werden können.
Beginnen wir mit den Erkenntnissen !!
Was du lernen wirst:
PL SQL-Ausnahmebehandlung
Ein Fehler oder ein Warnereignis wird als Ausnahme bezeichnet. Es tritt während der Laufzeitausführung des PL / SQL-Programms auf. PL / SQL verfügt über Mechanismen, um diese außergewöhnlichen Bedingungen mithilfe des Codeblocks EXCEPTION zu behandeln, in dem definiert ist, wie der Fehlerbedingung begegnet werden soll.
Es gibt zwei Arten von Ausnahmen. Sie sind unten aufgeführt:
- Benutzerdefinierte Ausnahmen.
- Systemdefinierte Ausnahmen.
Einige der gängigen systemdefinierten Ausnahmen sind nicht genügend Speicher und Durch Null teilen, mit Namen wie STORAGE_ERROR bzw. ZERO_DIVIDE. Benutzerdefinierte Ausnahmen werden in einem Paket, Unterprogramm oder im Deklarationsabschnitt des PL / SQL-Codeblocks deklariert und sollten mit Namen versehen werden.
Sobald eine Ausnahme auftritt, wird der natürliche Ausführungsfluss angehalten, und die Ausführung zeigt auf den Ausnahmeabschnitt des PL / SQL-Codes. Während die systemdefinierten Ausnahmen standardmäßig ausgelöst werden, müssen die benutzerdefinierten Ausnahmen explizit durch das Schlüsselwort RAISE ausgelöst werden.
Somit hilft die Ausnahmebehandlung dabei, die Fehler zu behandeln, die während der Laufzeitausführung und nicht beim Kompilieren des Programms auftreten.
Vorteile der Ausnahmebehandlung
Die Vorteile sind unten aufgeführt:
- Wenn unser Code keine Ausnahmebehandlung hat, müssen wir jedes Mal, wenn wir eine Anweisung ausführen, Fehler bei der Ausführung überprüfen.
- Wenn wir die Ausnahmebehandlung in unserem Code vermeiden, werden die tatsächlichen Fehler übersehen, was zu einigen anderen Fehlern führt.
- Die Ausnahmebehandlung ermöglicht das Überspringen mehrerer Überprüfungen im Code.
- Es bietet eine bessere Lesbarkeit des Codes, indem die Fehlerbehandlungsroutinen im Code isoliert werden.
Syntax für die Ausnahmebehandlung:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Die Standardausnahme wird mit ausgeführt WENN andere DANN.
Welches Betriebssystem eignet sich am besten für Laptops?
Betrachten wir eine Tabelle mit dem Namen BÜRGER .
SELECT * FROM CITIZEN;
Wir haben die CITIZEN-Tabelle mit Hilfe der unten angegebenen SQL-Anweisung erstellt.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Fügen Sie Werte mit den folgenden SQL-Anweisungen in diese Tabelle ein:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Codierungsimplementierung mit Ausnahmebehandlung:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Die Ausgabe des obigen Codes:
Im obigen Code wird eine Laufzeitausnahme ausgelöst, da in der CITIZEN-Tabelle keine Bürger mit 9 Jahren enthalten sind.
Ausnahme in PL / SQL auslösen
Eine Ausnahme kann von den Entwicklern explizit mit Hilfe des Schlüsselworts RAISE ausgelöst werden.
Die Syntax für das Auslösen von Ausnahmen:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Hier ist die Ausnahme_n der Name der Ausnahme, die wir auslösen. Auf diese Weise können wir sowohl benutzerdefinierte als auch systemdefinierte Ausnahmen auslösen.
Benutzerdefinierte Ausnahme
Die Entwickler können ihre eigenen Ausnahmen erstellen und diese zur Behandlung von Fehlern verwenden. Sie können im Deklarationsteil eines Unterprogramms erstellt werden und nur innerhalb dieses Unterprogramms aufgerufen werden.
Eine Ausnahme, die auf Paketebene erstellt wird, kann bei jedem Zugriff auf das Paket verwendet werden. Eine benutzerdefinierte Ausnahme kann mithilfe des Schlüsselworts RAISE ausgelöst werden.
Die Syntax für einen benutzerdefinierten Fehler lautet:
DECLARE exception_n EXCEPTION;
Hier das Ausnahme_n ist der Name der Ausnahme, die wir auslösen. Daher können wir eine Ausnahme deklarieren, indem wir einen Namen gefolgt vom Schlüsselwort EXCEPTION angeben. Eine Ausnahme kann auf ähnliche Weise deklariert werden wie Variablen. Eine Ausnahme ist jedoch eine unerwartete Bedingung und kein Datenelement.
Ausnahmebereich in PL / SQL:
Die Regeln für den Geltungsbereich der PL / SQL-Ausnahme sind nachstehend aufgeführt:
- Eine Ausnahme kann nicht mehr als einmal im selben Codeblock deklariert werden. Wir können jedoch dieselbe Ausnahme in zwei verschiedenen Codeblöcken deklarieren.
- Eine in einem Codeblock deklarierte Ausnahme ist innerhalb dieses Blocks lokal und für jeden Unterblock global.
- Wenn wir innerhalb eines Unterblocks erneut eine globale Ausnahme deklarieren, wird die lokale Deklaration außer Kraft gesetzt.
Betrachten wir noch einmal eine Tabelle mit dem Namen CITIZEN.
Code-Implementierung mit benutzerdefinierten Ausnahmen:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Die Ausgabe des obigen Codes:
Vordefinierte Ausnahme
Bei Verstößen gegen Datenbankregeln oder beim Überschreiten des systemabhängigen Schwellenwerts wird automatisch eine interne Ausnahme ausgelöst. Alle diese Fehler haben eine eindeutige Nummer und jede Ausnahme wird als Name definiert. Zum Beispiel, PL / SQL löst eine vordefinierte NO_DATA_FOUND-Ausnahme aus, wenn eine SELECT-Abfrage keine Zeilen abruft.
Alle vordefinierten Ausnahmen von PL / SQL werden im STANDARD-Paket deklariert, das sich mit der PL / SQL-Umgebung befasst.
Ausnahme | Oracle-Fehler | SQL CODE | Beschreibung |
---|---|---|---|
UNGÜLTIGE NUMMER | ZEIT - 01722 | -1722 | Diese Ausnahme wird ausgelöst, wenn die Konvertierung in eine Zeichenfolge in eine Zahl nicht erfolgreich ist, da die Zeichenfolge eine ungültige Zahl darstellt. |
ACCESS_INTO_NULL | JETZT - 06530 | -6530 | Diese Ausnahme wird ausgelöst, wenn einem Nullobjekt natürlich ein Wert zugewiesen wird. |
CASE_NOT_FOUND | JETZT - 06592 | -6592 | Diese Ausnahme wird ausgelöst, wenn keine der Optionen in der WHEN-Klausel ausgewählt ist und keine ELSE-Klausel vorhanden ist. |
COLLECTION_IS_NULL | JETZT - 06531 | -6531 | Diese Ausnahme wird ausgelöst, wenn der Code versucht, Erfassungsmethoden mit Ausnahme von EXISTS auf eine verschachtelte Tabelle oder ein nicht initialisiertes Varray anzuwenden. Sie kann auch ausgelöst werden, wenn unser Code versucht, einer verschachtelten Tabelle oder einem nicht initialisierten Varray Werte zuzuweisen. |
DUP_VAL_ON_INDEX | ZEIT - 00001 | -1 | Diese Ausnahme wird ausgelöst, wenn versucht wird, doppelte Werte in einer Spalte zu speichern, die durch einen eindeutigen Index eingeschränkt ist. |
CURSOR_ALREADY_OPEN | JETZT - 06511 | -6511 | Diese Ausnahme wird ausgelöst, wenn unser Code versucht, einen bereits geöffneten Cursor zu öffnen. |
INVALID_CURSOR | ZEIT - 01001 | -1001 | Diese Ausnahme wird ausgelöst, wenn wir versuchen, einige Operationen an Cursorn auszuführen, die nicht zulässig sind. Versuchen Sie beispielsweise, einen bereits geschlossenen Cursor zu schließen. |
LOGIN_DENIED | ZEIT - 01017 | -1017 | Diese Ausnahme wird ausgelöst, wenn das Programm versucht hat, sich mit einem falschen Benutzernamen und Kennwort bei der Datenbank anzumelden. |
KEINE DATEN GEFUNDEN | ZEIT - 01403 | 100 | Diese Ausnahme wird ausgelöst, wenn eine SELECT-Abfrage keine Zeilen abruft. |
NOT_LOGGED_ON | ZEIT - 01012 | -1012 | Diese Ausnahme wird ausgelöst, wenn wir versuchen, eine Datenbankoperation auszuführen, ohne eine Verbindung herzustellen. |
PROGRAM_ERROR | ZEIT - 06501 | -6501 | Diese Ausnahme wird ausgelöst, wenn im PL / SQL-Programm ein interner Fehler aufgetreten ist. |
ROWTYPE_MISMATCH | ZEIT - 06504 | -6504 | Diese Ausnahme wird ausgelöst, wenn ein Cursor versucht, Werte an eine Variable mit inkompatiblem Datentyp zurückzugeben. |
SELF_IS_NULL | JETZT - 30625 | -30625 | Diese Ausnahme wird ausgelöst, wenn eine Mitgliedsmethode aufgerufen wird, ohne ihren Objekttyp zu initialisieren. |
STORAGE_ERROR | JETZT - 06500 | -6500 | Diese Ausnahme wird ausgelöst, wenn dem PL / SQL-Programm der Speicherplatz ausgeht oder sein Speicher während der Ausführung beschädigt wurde. |
TOO_MANY_ROWS | ZEIT - 01422 | -1422 | Diese Ausnahme wird ausgelöst, wenn eine SELECT-Abfrage mehrere Zeilen abruft. |
SUBSCRIPT_BEYOND_COUNT | JETZT - 06533 | -6533 | Diese Ausnahme wird ausgelöst, wenn ein Index mehr als die Gesamtzahl der Elemente in der Auflistung beträgt. |
SUBSCRIPT_OUTSIDE_LIMIT | JETZT - 06532 | -6532 | Diese Ausnahme wird ausgelöst, wenn ein Index außerhalb des Schwellenbereichs liegt. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Diese Ausnahme wird ausgelöst, wenn die Konvertierung in eine Zeichenfolge in eine universelle Zeilen-ID nicht erfolgreich ist, da die Zeichenfolge eine ungültige Zeilen-ID darstellt. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Diese Ausnahme wird ausgelöst, wenn Oracle auf eine Ressource wartet. |
VALUE_ERROR | ORA-06502 | -6502 | Diese Ausnahme wird ausgelöst, wenn in unserem Programm ein mathematischer Fehler beim Konvertieren und Abschneiden auftritt. |
ZERO_DIVIDE | ORA-01476 | -1476 | Diese Ausnahme wird ausgelöst, wenn wir versuchen, eine Zahl durch 0 zu teilen. |
Häufig gestellte Fragen und Antworten
F # 1) Was ist eine vordefinierte Ausnahme in PL / SQL?
Antworten: Eine vordefinierte Ausnahme wird von PL / SQL automatisch ausgelöst, wenn ein Programm gegen die Regeln der Datenbank verstößt.
F # 2) Was ist die Behandlung von PL / SQL-Ausnahmen und warum wird sie benötigt?
Antworten: Ein Fehler oder ein unerwartetes Ereignis im Programm wird als Ausnahme bezeichnet. Es stoppt den normalen Ablauf der Programmausführung. In PL / SQL wird die Ausnahme in einem EXCEPTION-Block im Code behandelt, und in diesem Block wird die ordnungsgemäße Aktion gegen die Ausnahme beschrieben.
F # 3) Was versteht man unter Ausnahmebehandlung?
Antworten: Dies ist die Methode, um auf unerwartete Ereignisse zu reagieren, die während der Ausführung des Codes auftreten können.
F # 4) Was sind die beiden Formen der Fehlerbehandlung?
Antworten: Die zwei Formen der Fehlerbehandlung umfassen Kompilierungsfehler und Laufzeit Fehler . Der Laufzeitfehler tritt während der Ausführung des Programms aufgrund falscher Daten oder Logik auf. Die Fehler bei der Kompilierung werden beim Kompilieren unseres Codes abgefangen.
Bester Popup-Werbeblocker für Chrome
F # 5) Was ist der Unterschied zwischen Fehler und Ausnahme?
Antworten: Ausnahmen sind Vorfälle, die mit Hilfe des Try / Catch-Blocks behandelt werden und sowohl zur Kompilierungszeit als auch zur Laufzeit der Programmausführung auftreten können. Die Fehler treten dagegen nur zur Laufzeit auf.
Fazit
In diesem Tutorial haben wir einige grundlegende Konzepte von PL / SQL ausführlich besprochen, die für die Verwaltung der Ausnahmen in unseren Programmen wesentlich sind.
Wir haben die folgenden Themen behandelt:
- Ausnahmen.
- Arten von Ausnahmen.
- Einige vordefinierte Ausnahmen.
Im nächsten Tutorial werden wir die PL / SQL-Transaktionen, OOPS-Konzepte und viele weitere zusammenhängende Themen diskutieren.
Literatur-Empfehlungen
- Tutorial zur Behandlung von C # -Ausnahmen mit Codebeispielen
- Java-Ausnahmen und Ausnahmebehandlung mit Beispielen
- PL SQL-Paket: Oracle PL / SQL-Paket-Tutorial mit Beispielen
- Ausnahmebehandlung in C ++
- PL SQL Tutorial für Anfänger mit Beispielen | Was ist PL / SQL?
- PL SQL Records Tutorial mit Beispielen