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
댓글 없음:
댓글 쓰기