반응형
예외처리란? (TRY-CATCH)
- 프로그래밍 언어의 예외 처리와 유사한 방식으로 오류를 처리하는 것
수행 절차
- 1. SQL문을 TRY 구문에 작성
- 2. TRY 구문 수행
- 3. 오류 발생시 CATCH 구문 수행
- 4. 오류가 없을 경우 CATCH 이후 구문 수행
CATCH 발생 조건
- 심각도가 10을 넘는 경우
- 데이터베이스 연결을 닫지 않은 모든 실행 오류인 경우
구문
- TRY : 수행 할 쿼리 작성
- 단독 사용 불가
- 반드시 CATCH 구문으로 이어져야 함
- BEGIN TRY로 시작해서 END TRY로 종료
- CATCH : 오류 발생시 수행할 쿼리 작성
- 단독 사용 불가
- END TRY 구문 이후에 작성
- END CATCH로 시작해서 END CATCH로 종료
- TRY구문과 CATCH구문 사이에 다른 쿼리가 포함 될 경우 구문 오류 발생
BEGIN TRY
-- 수행 할 쿼리 작성
END TRY
BEGIN CATCH
-- 오류 발생시 수행 할 쿼리 작성
END CATCH
오류 세부 확인
- CATCH 구문에서 시스템 함수를 사용하여 오류에 대한 상세 정보를 확인
- ERROR_NUMBER() : 오류 번호 반환
- ERROR_SEVERITY() : 심각도 반환
- ERROR_STATE() : 오류 상태 번호 반환
- ERROR_PROCEDURE() : 오류가 발생한 저장 프로시저 또는 트리거의 이름 반환
- ERROR_LINE() : 오류를 발생시킨 줄 번호 반환
- ERROR_MESSAGE() : 오류 메시지의 내용을 반환
사용 예시
오류가 없는 구문 수행
- 오류가 없는 경우 END CATCH 이후 명령 수행
-- TRY 구문
BEGIN TRY
DECLARE @PICACHU NVARCHAR(10)
SET @PICACHU = '백만볼트'
END TRY
-- CATCH 구문
BEGIN CATCH
RAISERROR('데이터타입이 맞지 않습니다.',10, 1)
END CATCH
PRINT('피카츄 공격!')
PRINT(@PICACHU)
오류가 있는 구문 수행
- 오류 발생시 CATCH 구문 수행
- CATCH 구문 수행 후 이후 명령 수행
-- TRY 구문
BEGIN TRY
DECLARE @PICACHU INT
SET @PICACHU = '백만볼트'
END TRY
-- CATCH 구문
BEGIN CATCH
RAISERROR('데이터타입이 맞지 않습니다.',10, 1)
END CATCH
PRINT('피카츄 공격!')
PRINT(@PICACHU)
오류 발생시 수행 중단하기
- 위의 예시를 보면 CAT구문의 오류를 수행하고 나서도 이후의 구문을 수행
- 심각도가 10을 넘어야만 오류 발생시 실행 쿼리문 중단 가능
- 자세한 것은 RAISERROR, 심각도에 대한 포스팅을 확인해주세요.
-- TRY 구문
BEGIN TRY
DECLARE @PICACHU INT
SET @PICACHU = '백만볼트'
END TRY
-- CATCH 구문
BEGIN CATCH
RAISERROR('데이터타입이 맞지 않습니다.',11, 1) -- 심각도 11로 변경
END CATCH
PRINT('피카츄 공격!')
PRINT(@PICACHU)
오류가 있는 구문 수행시 오류 상세 보기
-- TRY 구문
BEGIN TRY
DECLARE @PICACHU INT
SET @PICACHU = '백만볼트'
END TRY
-- CATCH 구문
BEGIN CATCH
RAISERROR('데이터타입이 맞지 않습니다.',11, 1)
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage
END CATCH
PRINT('피카츄 공격!')
PRINT(@PICACHU)
반응형