Une erreur ORA-00942 sera généralement une erreur de compilation. Oracle doit résoudre le(s) nom(s) des tables au moment de la compilation. Les gestionnaires d'exceptions intercepteront les erreurs au moment de l'exécution, pas au moment de la compilation.
Si vous avez utilisé SQL dynamique, vous pouvez différer la résolution des noms au moment de l'exécution, auquel cas vous pouvez intercepter l'exception, c'est-à-dire
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.
Mais ce n'est pas une façon sensée, en général, d'écrire des procédures stockées. Vos procédures doivent savoir quelles tables existent réellement et les erreurs de syntaxe doivent être identifiées et résolues au cours du développement, et non au moment de l'exécution.