ORA-01403: No Data Found

Der Fehler ORA-01403: No Data Found (bzw: Keine Daten gefunden) tritt im PLSQL Kontext gerne bei „select into “ – Anweisungen auf.

select nachname into var_nachname where user_id = 1234;

Wird nun die Query ausgeführt und keine Zeile als Ergebnis gefunden, kann die Variable var_nachname nicht gefüllt werden und das Programm steigt an dieser Stelle aus.

Besser also den Fehler abfangen:

begin
   select nachname into var_nachname where user_id = 1234;
exception when no_data_found then:
--Fehlerbehandlungen;
end;

Der Fehler tritt aber auch in Kombination mit Varrays und Tables auf.
Hier ein Beispiel eines Arrays für Umrechnungskurse:

declare
   --Declaration des Typ eines Arrays,dass Numbers als Nutzinhalt speichert und durch Zeichen Adressiert wird
   type fxt is table of number index by varchar2(3);
   fxkurs_collection fxt;

   procedure Init
       for fxc in (select waehrung, kurs
                   from kurstabelle where datum = sysdate)
       loop
          fxkurs_collection(fxc.waehrung) := fxc.kurs;
       end loop;
   end Init;
begin
   -- Schreibt den Kurs von US-Dollar in die Konsole
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection('USD')); 

   -- Liefert No_Data_Found Exception
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection('XXX'));
end;

Auch hier kann man sich natürlich wieder über das „Fangen“ von Exceptions schützen. Um dies allerdings von vornherein zu verhindern, gibt es in PLSQL – genau wie in .Net – Methoden die Prüfen ob ein Schlüssel vorhanden ist:

if (fxkurs_collection.exists(waehrung)) then
   DBMS_OUTPUT.PUT_LINE(fxkurs_collection(waehrung));
else
   DBMS_OUTPUT.PUT_LINE('Kurs zu Waehrung nicht gefunden);
end if;
Dieser Beitrag wurde unter Oracle veröffentlicht. Setze ein Lesezeichen auf den Permalink.