PL-SQL 프로시져에서 익셉션 OTHERS 사용 질문 0 1 2,925

by 공기 [PL/SQL] PLSQL [2012.09.28 11:12:43]


아래와 같이  프로시져가  있을때,

속에  OTHERS 익셉션을   캐치하는곳이 있고,
최상위 외부에도  OTHERS 익셉션을  캐치하는 곳이 있습니다..


이경우  속에 OTHERS 익셉션이 잡혔을때,
최상위 외부 OTHERS 익셉션에도  정상적으로   에러가  전달이 되나요?


즉,  제 질문은    OTHERS를   사용할때는   최상위에만   한번 써야하는지...
아니면,  OTHERS를  몇번을  쓰든  상관이  없는지 궁금합니다.....


아시는 분 조언 좀 부탁드립니다.





PROCEDURE SP_CUST_PROC(

    I_CUST_NO    IN  VARCHAR2,

    o_err OUT VARCHAR2,   -- (S:정상, 오류:E)
    o_errMsg  OUT VARCHAR2    -- 오류결과메시지
)
IS


    BEGIN



   /* 건물번지에 저장 */
   BEGIN
  UPDATE  T_CUST_INFO
  SET CUST_YN = 'Y'
  WHERE   CUST_ID = AAAAA
  AND DEL_YN  = 'N';
   EXCEPTION
WHEN OTHERS THEN
 o_err := 'E';
 o_errMsg := '업데이트 ERROR!' || '( SQLERRM: ' || SQLERRM || ')';
   END;


   o_err := 'S';
   o_errMsg := 'SUCCESS!';


 EXCEPTION
 WHEN OTHERS THEN
   o_err    := 'E';
   o_errMsg := 'Error!' || '(SQLCODE : ' || SQLCODE || ':: SQLERRM: ' ||
  SQLERRM || ')';


    END



by 마농 [2012.09.28 11:39:02]
PL/SQL 은 블럭구조로 이루어 집니다.
하나의 블럭은 DECLARE BEGIN EXCEPTION END 로 이루어 지며
DECLARE 와 EXCEPTION 은 생략 가능하며 BEGIN END 는 필수입니다.
단 블럭 자체가 아닌 프로시져나 펑션의 경우 IS 구문이 DECLARE 를 대신합니다.
하나의 블럭은 다른 하나의 블럭을 내포할 수 있습니다.
단 블럭과 블럭이 서로 교차되어 겹쳐질수는 없겠지요.
- PL/SQL 강좌 : http://www.gurubee.net/oracle/plsql
블럭은 여러 블럭을 포함 할 수 있으므로
Exception 절도 얼마든지 여러번 사용 가능합니다.
내부 블럭의 Exception 절에서 에러를 잡았기 때문에
바깥 블럭의 Exception 절까지 에러가 전달 되지는 않습니다.
꼭 전달하고자 한다면 다음 두가지 방법을 생각할 수 있겠네요.
1. 내부 블럭의 Exception 절에서 강제로 에러를 발생시킵니다. RAISE 구문
2. 내부 블럭의 Exception 절을 제거하여 바깥에서 에러를 잡도록
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입