RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR ist eine PL-SQL-Funktion, die in PL/SQl einen Laufzeitfehler erzeugt. Zusätzlich zum Laufzeitfehler (EXCEPTION, zeigt dieser Befehl den Text-Parameter als Fehlermeldung an und bricht das Programm fehlerhaft ab.
Die Fehlernummer ist eine negative Nummer kleiner als -20000. Sie ist nur von Relevanz, wenn Fehler über mehrere Aufrufhierarchien vom PL/SQL-Routinen hinweg übermittelt werden sollen. Die optionale Angabe von TRUE oder FALSE spezifiziert, ob die Fehlermeldung DBMS-intern auf einem Stack zwischengelagert werden soll.
Syntax der RAISE_APPLICATION_ERROR-Funktion:
RAISE_APPLICATION_ERROR(negative_nr, Text, { TRUE | FALSE } )
Beispiele:
Ein Trigger, der sichert, dass Teile-Daten nur zwischen 8 und 17 Uhr verändert werden dürfen.
CREATE OR REPLACE TRIGGER Teil_1 BEFORE DELETE OR UPDATE OR INSERT ON Teile FOR EACH ROW WHEN (TO_CHAR(SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '17:00') BEGIN RAISE_APPLICATION_ERROR (-20001, ‚'Sie durfen nur zwischen 8:00 und 17:00 Uhr Daten eingeben!'); END;
Eine Prozedur zum Löschen des Lagerbestand für Teile, die keine Materialien sind:
CREATE OR REPLACE PROCEDURE Loesche_Lagerbestand3 (p_Teilenr Teile.TNr%TYPE, p_jahr number) IS v_Nr Teile.TNr%TYPE; v_Typ Teile.Typ%TYPE; BEGIN SELECT TNr INTO v_Nr FROM Teile WHERE TNr = p_Teilenr; SELECT Typ INTO v_Typ FROM Teile WHERE TNR = p_Teilenr; IF v_typ = 'Material' THEN RAISE_APPLICATION_ERROR(-20002, 'Materialien dürfen nicht gelöscht werden!'); END IF; IF LENGTH (p_jahr) <> 4 THEN RAISE_APPLICATION_ERROR(-20003, 'Jahreszahl fehlerhaft! Bitte 4-stellig eingeben'); END IF; DELETE FROM Lagerbestand WHERE TNr = p_Teilenr; COMMIT; END;
Quellen:
- Faeskorn-Woyke, Heide; Bertelsmeier, Birgit; Riemer, Petra; Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, München, 2007, ISBN 978-3-8273-7266-6
- Feuerstein, Steven, Pribyl. Bill: "Oracle PL/SQL Programming", O'Reilly, 2009, ISBN-13: 978-0596514464
- Oracle® Database SQL Language Reference 11g Release 1 (11.1) in http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm
- Oracle® Database PL/SQL Language Reference 11g Release 2 (11.2) in http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm
- Saurabh, Gupta: "Oracle Advanced PL/SQL Developer Professional Guide", Packt Publishing Limited, 2012, ISBN 978-1-84968-722-5
Kategorie: Oracle-PL-SQL, Aktive Datenbanken, R