by 잔든건 [PL/SQL] Oracle Exception RAISE_APPLICATION_ERROR [2021.10.25 17:07:51]
안녕하세요. 가끔 방문해서 질문드리는데 항상 친절하게
답변주셔서 많은 도움을 받았습니다.
오늘은 예외처리 관련하여 문의드리려고 합니다.
프로시져1에서 프로시져2를 호출하는 구조입니다.
이때 프로시져2에서 RAISE_APPLICATION_ERROR를 통해 사용자정의오류를 처리하였는데
프로시져1에도 동일하게 프로시져2의 EXCEPTION 처리 방안은 무엇이 있을까요?
-> 현재는 프로시져2에 INOUT 변수를 추가해 프로시져2에서 EXCEPTION 처리시 해당변수에 오류메시지를 할당해서
프로시져1에서 그 값이 있는경우 또다시 RAISE 처리하는 형태로 구성되어있습니다.
다른방안이 혹시 있는지 문의드리고자 글을 작성했습니다.
답변부탁드립니다.
감사합니다.
안녕하세요. 답변감사합니다.
테스트용으로 SP_EXCEPTION1, SP_EXCEPTION2를 만들어서 호출했을때 SP_EXCEPTION1에서
오류를 catch하지 못하는데 스크립트를 보고 확인해주실 수 있을까요?
------------SP_EXCEPTION1
CREATE OR REPLACE PROCEDURE SP_EXCEPTION1 (
T_PARAM1 IN VARCHAR2,
T_return_msg IN OUT VARCHAR2
) IS
BEGIN
BEGIN
SP_EXCEPTION2(T_PARAM1,T_return_msg);
dbms_output.put_line('test1:'||T_return_msg);
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('test1-2:'||T_return_msg);
RAISE_APPLICATION_ERROR(-20001,'오류처리'||T_return_msg);
END;
exception
when others then
dbms_output.put_line('test1-3:'||T_return_msg);
END;
/
---------SP_EXCEPTION2
CREATE OR REPLACE PROCEDURE SP_EXCEPTION2 (
T_PARAM1 IN VARCHAR2,
T_return_msg IN OUT VARCHAR2
) IS
ex_tst EXCEPTION;
pragma exception_init (ex_tst ,-1843);
BEGIN
dbms_output.put_line('test2:');
raise ex_tst;
--RAISE_APPLICATION_ERROR(-20001,'오류처리 테스트입니다.');
dbms_output.put_line('test2-2:'||T_return_msg);
EXCEPTION
WHEN OTHERS THEN
T_return_msg := '오류처리 테스트입니다!.';
END;
/
--- 프로시져 호출
DECLARE
p_code varchar2(10);
p_msg varchar2(100);
BEGIN
SP_EXCEPTION1 ('TEST', p_msg);
END;
---------처리결과
test2:
test1:오류처리 테스트입니다!.