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