Een ORA-00942-fout is over het algemeen een fout tijdens het compileren. Oracle moet de naam(namen) van de tabellen tijdens het compileren oplossen. Exception handlers vangen fouten op tijdens runtime, niet tijdens compileren.
Als je dynamische SQL hebt gebruikt, kun je het omzetten van namen naar runtime uitstellen, waarna je de uitzondering kunt opvangen, d.w.z.
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.
Maar dat is in het algemeen geen verstandige manier om opgeslagen procedures te schrijven. Uw procedures moeten weten welke tabellen er werkelijk bestaan en syntaxisfouten moeten worden geïdentificeerd en opgelost tijdens de ontwikkeling, niet tijdens runtime.