TAKTUM Logo


Oracle Schulung
Oracle Schulung

Oracle PL/SQL Tutorial: Fehlerbehandlung
Erläuterungen zu Laufzeitfehlern

Exceptions 

Tritt zur Laufzeit ein Fehler auf, so wird eine Exception ausgelöst. Jeder Exception ist eine Datenbank - Fehlernummer zugeordnet. Durch den Exception Handler kann im Programm auf das Auslösen einer Exception reagiert werden. Für die wichtigsten Fehlerfälle existieren eine Reihe von vordefinierten Exceptions. Darüber hinaus können weitere Exceptions frei definiert werden (siehe unten). Das Auslösen einer Exception führt immer zum Verlassen des aktuellen Blocks. Soll der Fehlerzustand an den übergeordneten Block weitergegeben werden, so muß dieses mit dem Befehl RAISE erfolgen.

Tritt ein Laufzeitfehler ohne zugehörigen Exception Handler auf, so wird der aktuelle Block mit dem Fehlerzustand verlassen und die Fehlerbehandlung erfolgt von neuem im übergeordneten Block.

Beispiel:

declare
  ...
begin
  ...
exception when OTHERS then
  dbms_output.put_line ('Fehler:' || sqlerrm);
end;

Vordefinierte Exceptions 

Exception Name       Fehlernr.  Beschreibung 

CURSOR_ALREADY_OPEN  ORA-06511  Cursor bereits geöffnet

DUP_VAL_ON_INDEX     ORA-00001  Schlüssel doppelt eingetragen

INVALID_CURSOR       ORA-01001  Cursor nicht geöffnet

INVALID_NUMBER       ORA-01722  bei impliziter Typkonvertierung

LOGIN_DENIED         ORA-01017  Benutzername oder Paßwort falsch

NO_DATA_FOUND        ORA-01403  SELECT liefert kein Ergebnis

NOT_LOGGED_ON        ORA-01012  Keine Verbindung zur Datenbank

PROGRAM_ERROR        ORA-06501  Interner PL/SQL - Fehler

ROWTYPE_MISMATCH     ORA-06504  Strukturvariablen inkompatibel

STORAGE_ERROR        ORA-06500  Speicherprobleme

TIMEOUT_ON_RESOURCE  ORA-00051  Datenbank-Sperre

TOO_MANY_ROWS        ORA-01422  SELECT liefert mehr als eine
                                Zeile

VALUE_ERROR          ORA-06502  meistens: Zeichenkette zu kurz definiert

ZERO_DIVIDE          ORA-01476  durch 0 geteilt

Verschachtelung von Exceptions 

Eine Exception gilt für den Block, in dem sie definiert ist oder wenn der Fehler in einem Subblock auftritt und dort nicht behandelt wird. Der Fehlerzustand wird mit dem Befehl RAISE weitergegeben.

Beispiele:

begin
  ...
  declare
    a number(1);
  begin
    a := 55;
  end;
  ...
exception when VALUE_ERROR then
  ...
end;

begin
  ...
  declare
    a number(1);
  begin
    a := 55;
  exception when VALUE_ERROR then
    raise VALUE_ERROR;
  end;
  ...
exception when VALUE_ERROR then
  ...
end;

User Defined Exceptions 

Beispiel:

declare

  v_bezeichnung     einheit.bezeichnung%TYPE;

  EINHEIT_FEHLER    EXCEPTION;

begin

  select bezeichnung into v_bezeichnung
    from einheit
    where einheit_kurz = 'm';

  if v_bezeichnung <> 'Meter' then

    raise EINHEIT_FEHLER;

  end if;

exception when EINHEIT_FEHLER then

  ...

end;

Zuordnung von Datenbank - Fehlernummern zu Exceptions 

Über PRAGMA - Anweisungen können Datenbank - Fehlernummern Exceptions über die bereits vordefinierten hinaus zugeordnet werden. Alle Oracle - Fehlernummern können hier verwendet werden. Dabei stehen die Fehlernummern -20000 bis -20999 zusätzlich für die Programmierung frei zur Verfügung.

Der Befehl raise_application_error erzeugt einen Fehlerzustand unter Angabe der Fehlernummer und des Fehlertextes. Dies ist zur Verwendung der freien Fehlernummern -20000 bis -20999 gedacht.

Beispiel:

declare

  v_bezeichnung    einheit.bezeichnung%TYPE;

  EINHEIT_FEHLER   EXCEPTION;

  PRAGMA EXCEPTION_INIT (EINHEIT_FEHLER, -20100);

begin

  select bezeichnung into v_bezeichnung
    from einheit
    where einheit_kurz = 'm';

  if v_bezeichnung <> 'Meter' then

    raise_application_error (-20100, 'Bezeichnung falsch');

  end if;

exception when EINHEIT_FEHLER then

  ...

end;



Stichwörter

Fehlerbehandlung exception exceptions raise raise_appilcation_error ora Fehlernummern Fehlernummer Laufzeitfehler Beispiel Beispiele