Lỗi ORA-00942 thường là lỗi thời gian biên dịch. Oracle phải giải quyết (các) tên của các bảng tại thời điểm biên dịch. Các trình xử lý ngoại lệ sẽ bẫy lỗi trong thời gian chạy, không phải thời gian biên dịch.
Nếu bạn đã sử dụng SQL động, bạn có thể hoãn việc phân giải các tên trong thời gian chạy mà tại thời điểm đó, bạn có thể bắt được ngoại lệ, tức là
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.
Nhưng đó không phải là một cách hợp lý, nói chung, để viết các thủ tục được lưu trữ. Các thủ tục của bạn nên biết bảng nào thực sự tồn tại và các lỗi cú pháp phải được xác định và giải quyết trong quá trình phát triển, không phải trong thời gian chạy.