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