Oracle
 sql >> Database >  >> RDS >> Oracle

Gestione degli errori Oracle

Un errore ORA-00942 sarà generalmente un errore in fase di compilazione. Oracle deve risolvere i nomi delle tabelle in fase di compilazione. I gestori di eccezioni intercetteranno gli errori in fase di esecuzione, non in fase di compilazione.

Se hai utilizzato l'SQL dinamico, puoi posticipare la risoluzione dei nomi al runtime a quel punto puoi catturare l'eccezione, ad es.

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.

Ma questo non è un modo sensato, in generale, di scrivere stored procedure. Le tue procedure dovrebbero sapere quali tabelle esistono effettivamente e gli errori di sintassi dovrebbero essere identificati e risolti durante lo sviluppo, non in fase di esecuzione.