프로시져 안의 프로시져 호출시 예외처리 0 2 2,297

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 처리하는 형태로 구성되어있습니다.

 

다른방안이 혹시 있는지 문의드리고자 글을 작성했습니다.

답변부탁드립니다.

감사합니다.

 

 

 

by 마농 [2021.10.25 17:37:33]

P2 에서 에러를 내면 P1 에 동일한 에러가 납니다.
이걸 (예외(Exception) 처리를 다시 할지 / 그대로 오류를 낼지) 정하시면 됩니다.


by 잔든건 [2021.10.28 20:43:02]

안녕하세요. 답변감사합니다.

테스트용으로 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:오류처리 테스트입니다!.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입