TRY & CATCH로 오류 잡기!

SQL Server에서 함수와 저장 프로시저 작성하기

Meghan Kwartler

IT Consultant

오류를 처리할 것인가 말 것인가

오류 처리는 무엇인가요?

  • 오류 예측, 감지, 해결
  • 정상 실행 흐름 유지
  • 초기 설계에 통합

오류 처리가 없으면?

  • 갑작스런 종료 또는 실행 중단
  • 맥락 없는 일반 오류 메시지 제공
SQL Server에서 함수와 저장 프로시저 작성하기

TRY 해 봅시다

ALTER PROCEDURE dbo.cusp_TripSummaryCreate
  @TripDate nvarchar(30),
  @RideHrs numeric,

@ErrorMsg nvarchar(max) = null OUTPUT
AS BEGIN BEGIN TRY INSERT INTO TripSummary (Date, TripHours) VALUES (@TripDate, @RideHrs) END TRY ........
SQL Server에서 함수와 저장 프로시저 작성하기

이제 CATCH 할 시간

ALTER PROCEDURE dbo.cusp_TripSummaryCreate
  @TripDate nvarchar(30),
  @RideHrs numeric, 
  @ErrorMsg nvarchar(max) = null OUTPUT
AS
BEGIN
  BEGIN TRY
      INSERT INTO TripSummary (Date, TripHours)
      VALUES (@TripDate, @RideHrs)
  END TRY
  BEGIN CATCH
      SET @ErrorMsg = 'Error_Num: ' +
      CAST (ERROR_NUMBER() AS varchar) +
      ' Error_Sev: ' + 
      CAST(ERROR_SEVERITY() AS varchar) +  
      ' Error_Msg: ' + ERROR_MESSAGE()
  END CATCH
END
SQL Server에서 함수와 저장 프로시저 작성하기

ERROR를 보여 주세요...

DECLARE @ErrorMsgOut as nvarchar(max)

EXECUTE dbo.cusp_TripSummaryCreate 
        @TripDate = '1/32/2018',
        @RideHrs = 100,
        @ErrorMsg = @ErrorMsgOUT OUTPUT

SELECT @ErrorMsgOut as ErrorMessag
ErrorMessage
-------------------------------------------------
Error_Num: 241 Error_Sev: 16 
Error_Msg: Conversion failed when converting date and/or time from 
           character string
SQL Server에서 함수와 저장 프로시저 작성하기

THROW vs RAISERROR

THROW

  • SQL Server 2012에 도입
  • 간단하고 사용이 쉬움
  • 이후 구문은 실행되지 않음

RAISERROR

  • SQL Server 7.0에 도입
  • 새 오류 생성. 원래 오류의 세부 정보(예: 발생한 줄 번호)에 접근 불가
  • 이후 구문은 실행될 수 있음
SQL Server에서 함수와 저장 프로시저 작성하기

이제 CATCH 해 보세요!

SQL Server에서 함수와 저장 프로시저 작성하기

Preparing Video For Download...