Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Behandlung von Oracle-Fehlern

Ein ORA-00942-Fehler ist im Allgemeinen ein Kompilierzeitfehler. Oracle muss die Namen der Tabellen zur Kompilierzeit auflösen. Ausnahmehandler fangen Fehler zur Laufzeit ab, nicht zur Kompilierzeit.

Wenn Sie dynamisches SQL verwendet haben, können Sie die Namensauflösung auf die Laufzeit verschieben, an welcher Stelle Sie die Ausnahme abfangen können, d. h.

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    no_such_table exception;
  3    pragma exception_init( no_such_table, -942 );
  4    l_cnt integer;
  5  begin
  6    execute immediate 'select count(*) from emps' into l_cnt;
  7  exception
  8    when no_such_table
  9    then
 10      dbms_output.put_line( 'No such table' );
 11* end;
SQL> /
No such table

PL/SQL procedure successfully completed.

Aber das ist im Allgemeinen kein vernünftiger Weg, gespeicherte Prozeduren zu schreiben. Ihre Prozeduren sollten wissen, welche Tabellen tatsächlich existieren, und Syntaxfehler sollten während der Entwicklung identifiziert und behoben werden, nicht zur Laufzeit.