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;