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;
