Ошибка ORA-00942 обычно является ошибкой времени компиляции. Oracle должен разрешить имена таблиц во время компиляции. Обработчики исключений будут перехватывать ошибки во время выполнения, а не во время компиляции.
Если вы использовали динамический SQL, вы можете отложить разрешение имен до времени выполнения, после чего вы можете перехватить исключение, т. Е.
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.
Но в общем случае это не разумный способ писать хранимые процедуры. Ваши процедуры должны знать, какие таблицы существуют в действительности, и синтаксические ошибки должны быть выявлены и устранены во время разработки, а не во время выполнения.