(ORACLE PLSQL)오라클 EXCEPTION으로 CATCH(ORA-00942, ORA-06550, "table or view does 
not exist") 
create or replace procedure deleteTable 
is 
notfoundtable                EXCEPTION; 
    PRAGMA EXCEPTION_INIT  
(notfoundtable, -942); 
BEGIN 
          DELETE FROM onj; 
EXCEPTION 
          WHEN notfoundtable THEN NULL; 
    DBMS_OUTPUT.PUT_LINE(SQLCODE 
||  ' ** '  || SQLERRM); 
END; 
/ 
[오류 메시지] 
DELETE FROM 
ex1; 
                      * 
ERROR at line 10: 
ORA-06550: line 10, 
column 23: 
PL/SQL: ORA-00942: table or view does not exist 
ORA-06550: 
line 10, column 11: 
PL/SQL: SQL Statement ignored 
위 오류는 컴파일 시점에 
발생하는 오류이기 때문에 EXCEPTION절로 잡을 수가 없다. 
이를 잡아내기 위해서는 동적SQL로 만들어 런타임 오류로 잡아야 한다. 
PL/SQL EXCEPTION구문으로 잡을 수 있는것은 런타임 오류임을 명심하자. 
[해결방법] 
SQL> create or replace procedure deleteTable 
    is 
        
notfoundtable          EXCEPTION; 
        PRAGMA EXCEPTION_INIT  
(notfoundtable, -942); 
    BEGIN 
              --DELETE FROM onj; 
  
          EXECUTE IMMEDIATE 'DELETE FROM onj'; 
    EXCEPTION 
        
WHEN notfoundtable THEN NULL; 
      DBMS_OUTPUT.PUT_LINE(SQLCODE ||  ' ** '  
|| SQLERRM); 
 10  END; 
 11  / 
Procedure created. 
SQL> 
exec DELETEONJ; 
PL/SQL procedure successfully completed. 
SQL> 
set serveroutput on 
SQL> exec DELETEONJ; 
-942 ** ORA-00942: table or 
view does not exist  
 

 
  
 

 
댓글 없음:
댓글 쓰기