behandlung mit PL/SQL behandlung Was ist eine? Anzeige von Fehlern Wie werden sie angezeigt? Ein Oracle error erscheint. Die Anzeige ist explizit. Wie behandelt man es? Abfangen mit einem Programm. Weiterleiten an die rufende Umgebung. Copyright Oracle Corporation, 1998. All rights reserved. 23-2 Copyright Oracle Corporation, 1998. All rights reserved. behandlung Abfangen der ist angezeigt ist abgefangen Weiterleiten der ist angezeigt ist nicht abgefangen typen Vordefiniert in Oracle Server } Implizite Nicht vordefiniert in Anzeige Oracle Server Benutzerdefiniert Explizite Anzeige wird weitergeleitet und die Umgebung 23-3 Copyright Oracle Corporation, 1998. All rights reserved. 23-4 Copyright Oracle Corporation, 1998. All rights reserved.
Syntax Abfangen von n WHEN exception1 [OR exception2 ] THEN [WHEN exception3 [OR exception4 ] THEN ] [WHEN OTHERS THEN ] Richtlinien zum Abfangen von n WHEN OTHERS ist die letzte Klausel Schlüsselwort startet die behandlung. Verschiedene behadlungen sind erlaubt Nur ein Anwender arbeitet bevor der Prozess verlassen wird 23-5 Copyright Oracle Corporation, 1998. All rights reserved. 23-6 Copyright Oracle Corporation, 1998. All rights reserved. Abfangen vordefinierter Oracle Server Errors Den Standardnamen der behandlung benutzen Beispiele vordefinierter n: NO_DATA_FOUND TOO_MANY_ROWS INVALID_CURSOR ZERO_DIVIDE DUP_VAL_ON_INDEX Syntax Vordefinierte n SELECT... COMMIT; WHEN NO_DATA_FOUND THEN WHEN TOO_MANY_ROWS THEN WHEN OTHERS THEN statement3; 23-7 Copyright Oracle Corporation, 1998. All rights reserved. 23-8 Copyright Oracle Corporation, 1998. All rights reserved.
Abfangen nicht vordefinierter Oracle Server Errors Deklaration Name der Deklarative Sektion Zuordnung Code der PRAGMA _INIT Referenz behandlungsteil Behandle die angezeigte Nicht vordefinierter Fehler Abfangen mit Oracle Server Fehlernummer -2292 eine Verletzung der referentiellen Integrität e_products_invalid; ; 1 PRAGMA _INIT ( e_products_invalid, -2292); 2 v_message VARCHAR2(50); WHEN e_products_invalid THEN 3 :g_message := 'Product code specified is not valid.'; 23-9 Copyright Oracle Corporation, 1998. All rights reserved. 23-10 Copyright Oracle Corporation, 1998. All rights reserved. Abfangen benutzerdefinierter n Deklaration Deklarative Sektion Name der Anzeigen Ausführbare Sektion Explizite Anzeige der mit Gebrauch des RAISE Statments Referenz Behandlung der angezeigten behandlungssektion Benutzerdefinierte n Beispiel [] e_amount_remaining ; 1 RAISE RAISE e_amount_remaining; 2 WHEN e_amount_remaining THEN :g_message := 'There is still an amount 3 in stock.'; 23-11 Copyright Oracle Corporation, 1998. All rights reserved. 23-12 Copyright Oracle Corporation, 1998. All rights reserved.
Funktionen zum Abfangen von n SQLCODE Gibt einen numerischen Wert als Fehlercode zurück SQLERRM Gibt eine Nachricht zusammen mit der Fehlernummer zurück Funktionen zum Abfangen von n Beispiel v_error_code NUMBER; v_error_message VARCHAR2(255);...... WHEN OTHERS THEN ROLLBACK; v_error_code := SQLCODE ; v_error_message := SQLERRM ; INSERT INTO errors VALUES(v_error_code, v_error_message); 23-13 Copyright Oracle Corporation, 1998. All rights reserved. 23-14 Copyright Oracle Corporation, 1998. All rights reserved. Weiterleiten von n Subblöcke können eine behandeln oder die an den einschließenden Block übergeben. e_no_rows exception; e_integrity exception; PRAGMA _INIT (e_integrity, -2292); FOR c_record IN emp_cursor LOOP SELECT... UPDATE... IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; WHEN e_integrity THEN... WHEN e_no_rows THEN... END LOOP; WHEN NO_DATA_FOUND THEN WHEN TOO_MANY_ROWS THEN Link für Fehlerbehandlung / Exceptions http://fara.cs.unipotsdam.de/~uhlmann/19/ch09.html 23-15 Copyright Oracle Corporation, 1998. All rights reserved. 23-16 Copyright Oracle Corporation, 1998. All rights reserved.
RAISE_APPLICATION_ERROR RAISE_APPLICATION_ERROR Syntax raise_application_error (error_number, message[, {TRUE FALSE}]); Eine Prozedur, die nutzerdefinierte Fehlermeldungen von einem stored subprogram ausgeben läßt. Benannt nur von einem ausführbaren stored subprogram. Kann an zwei unterschiedlichen Stellen angewandt werden: Ausführbare Sektion Sektion Gibt Fehlerbedingungen in der gleichen Art wie andere Oracle Server Fehler an den Nutzer zurück. 23-17 Copyright Oracle Corporation, 1998. All rights reserved. 23-18 Copyright Oracle Corporation, 1998. All rights reserved.