Um erro ORA-00942 geralmente será um erro de tempo de compilação. O Oracle precisa resolver o(s) nome(s) das tabelas em tempo de compilação. Os manipuladores de exceção interceptarão erros em tempo de execução, não em tempo de compilação.
Se você usou SQL dinâmico, você pode adiar a resolução de nomes para o tempo de execução, quando você pode capturar a exceção, ou seja,
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.
Mas essa não é uma maneira sensata, em geral, de escrever procedimentos armazenados. Seus procedimentos devem saber quais tabelas realmente existem e os erros de sintaxe devem ser identificados e resolvidos durante o desenvolvimento, não em tempo de execução.