En ORA-00942-fejl vil generelt være en kompileringstidsfejl. Oracle skal opgøre navnene på tabellerne på kompileringstidspunktet. Undtagelsesbehandlere vil fange fejl under kørsel, ikke kompileringstidspunkt.
Hvis du brugte dynamisk SQL, kan du udskyde opløsningen af navne til runtime, hvorefter du kan fange undtagelsen, dvs.
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.
Men det er generelt ikke en fornuftig måde at skrive lagrede procedurer på. Dine procedurer bør vide, hvilke tabeller der faktisk eksisterer, og syntaksfejl skal identificeres og løses under udvikling, ikke under kørsel.