-
[Oracle] 프로시저(procedure), function에서 예외(exception)처리DataBase/Oracle 2018. 9. 4. 11:24
exception 처리에 대해 글을 쓸 거지만 오늘 있었던 일에 비추어 한 가지만 포스팅 하려고 한다.
oracle에서 function을 만들던 도중, 원하는 값이 나오지 않고 계속해서 Null 값이 떨어졌다.
function 안에 transaction이 실행 되는 지점 마다 print를 하나하나씩 찍어보다보니
원인 지점을 찾았다.
오늘 배운 것이지만, 프로시저 실행 중에
SELECT INTO를 사용하는 로직에서 Null값을 받아오고 INTO에 아무 값도 들어가지 않으면 exception이 발생한다.
function이 exception을 던진다는 것도 오늘 알았다. (갈 길이 멀다 나란 초보 ㅠ_ㅠ)
그런 결과로 function이 끝까지 타지 않고 중간에 exception을 날려버려 멈춰버리는 것이다.
그래서 찾은 방법이 exception처리다!
1234567891011121314151617181920BEGINsome logic..IF IS_NEW_COMMENT = '1' THENDECLARE IN_COMMENT_COUNT NUMBER(10,0);BEGINSELECT COUNT INTO IN_COMMENT_COUNT FROM COMMENT_COUNT WHERE USER_ID = 'ZORBA'; -- 여기서 null값이 리턴되면 exception을 던진다EXCEPTION WHEN NO_DATA_FOUND -- 데이터가 없을 경우 exceptionTHEN IN_COMMENT_COUNT := 0; -- exception이 생기면 어떤 일을 할지 작성. 나는 변수가 null값이 되는 걸 방지하기 위해 0을 대입했다.IF IN_COMMENT_COUNT > 0 THEN -- 데이터가 없어서 IN_COMMENT_COUNT가 0이 됐을 경우, 해당 로직을 타진 않지만, 계속 프로시저를 수행BEGINRETURN_COMMENT_COUNT := CONCAT('[', CONCAT(IN_COMMENT_COUNT, ']'));END;END;END IF;END;cs SELECT INTO가 Null값을 받아오면, exception을 던지는데, 그때
EXCEPTION WHEN NO_DATA_FOUND THEN 'exception을 처리할 로직' 을 사용해 예외의 경우를 처리한다.
'DataBase > Oracle' 카테고리의 다른 글
[oracle] 오라클에서 System.out.print()?! 프린트 하는 법 (0) 2018.09.04 [Oracle] 오라클 CLOB형 LENGTH(길이) 구하기, SUBSTR(문자열 자르기) 하는 방법 (0) 2018.09.04 [Oracle,MySQL] mybatis foreach문을 이용해 다중 insert 하는 법 (0) 2018.08.31 [Oracle] sql developer에서 'oracle에 복사' '확인' 버튼이 보이지 않을 때 해결방법 (0) 2018.08.31 [Oracle] ORA-01745: 호스트/바인드 변수명이 부적합합니다. 에러해결 (0) 2018.08.30