상세 컨텐츠

본문 제목

MS-SQL Try Catch

DataBase/SQL Server

by 탑~! 2015. 1. 15. 11:38

본문

-------------------------------사용방법-------------------------------
ex) 0나누기 오류 처리
BEGIN TRY
    SELECT 1/0;
END TRY
BEGIN CATCH
    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

-------------------------------주의사항-------------------------------

1. 구문은 심각도가 10을 넘으며 데이터베이스 연결을 닫지 않는 모든 실행 오류를 catch합니다.

2. TRY 블록 다음에는 곧바로 연결된 CATCH 블록이 이어져야 합니다. END TRY와 BEGIN CATCH 문 사이에 다른 문을 포함시키면 구문 오류가 발생합니다.

3. TRY...CATCH 구문은 여러 일괄 처리에 걸칠 수 없으며 또한 여러 Transact-SQL 문 블록에 걸칠 수 없습니다. 예를 들어 하나의 TRY...CATCH 구문이 두 개의 Transact-SQL BEGIN…END 블록에 걸치거나 IF...ELSE 구문에 걸칠 수 없습니다.

4. TRY 블록의 마지막 문 실행을 완료할 때 TRY 블록으로 묶은 코드에 오류가 없는 경우 연결된 END CATCH 문 바로 다음 문으로 제어가 전달됩니다. TRY 블록으로 묶은 코드에 오류가 있는 경우 연결된 CATCH 블록의 첫 번째 문으로 제어가 전달됩니다. END CATCH 문이 저장 프로시저 또는 트리거의 마지막 문인 경우 해당 저장 프로시저를 호출하거나 트리거를 발생시킨 문으로 제어가 전달됩니다.

5. CATCH 블록의 코드를 완료하면 END CATCH 문 바로 다음 문으로 제어가 전달됩니다. CATCH 블록이 포착한 오류는 호출 응용 프로그램으로 반환되지 않습니다. 오류 정보를 응용 프로그램으로 반환해야 하는 경우 CATCH 블록의 코드에서 SELECT 결과 집합 또는 RAISERROR 및 PRINT 문과 같은 메커니즘을 사용하십시오. RAISERROR에 TRY...CATCH를 사용하는 방법은 Transact-SQL에서 TRY...CATCH 사용을 참조하십시오.

6. TRY...CATCH 구문은 중첩할 수 있습니다. TRY 블록 또는 CATCH 블록은 중첩된 TRY...CATCH 구문을 포함할 수 있습니다. 예를 들어 CATCH 블록에 TRY...CATCH 구문을 포함하여 CATCH 코드가 발견하는 오류를 처리할 수 있습니다.

7. CATCH 블록에서 발견되는 오류는 다른 곳에서 발생한 오류와 같이 취급됩니다. CATCH 블록이 중첩된 TRY...CATCH 구문을 포함하는 경우 중첩된 TRY 블록에서 오류가 발생하면 중첩된 CATCH 블록으로 제어가 전달됩니다. 중첩된 TRY...CATCH 구문이 없는 경우 호출자로 오류가 다시 전달됩니다.

8. TRY...CATCH 구문은 TRY 블록의 코드가 실행한 저장 프로시저 또는 트리거에서 처리되지 않은 오류를 포착합니다. 또는 저장 프로시저나 트리거 자체에 코드에서 발생한 오류를 처리할 수 있도록 TRY...CATCH 구문을 포함할 수 있습니다. 예를 들어 TRY 블록이 저장 프로시저를 실행하고 해당 저장 프로시저에서 오류가 발생하는 경우 다음과 같은 방법으로 오류를 처리할 수 있습니다.

  • 저장 프로시저가 자체적인 TRY...CATCH 구문을 포함하지 않는 경우 오류가 발생하면 EXECUTE 문을 포함하는 TRY 블록과 연결된 CATCH 블록으로 제어가 반환됩니다.
  • 저장 프로시저가 TRY...CATCH 구문을 포함하는 경우 오류가 발생하면 저장 프로시저의 CATCH 블록으로 제어가 전달됩니다. CATCH 블록 코드를 완료하면 해당 저장 프로시저를 호출한 EXECUTE 문 바로 다음 문으로 제어가 전달됩니다.

9. GOTO 문을 사용하여 TRY 또는 CATCH 블록에 진입할 수 없지만 동일한 TRY 또는 CATCH 블록 내의 레이블로 이동하거나 TRY 또는 CATCH 블록에서 나가는 것은 가능합니다.

10. 사용자 정의 함수에는 TRY...CATCH 구문을 사용할 수 없습니다.



출처 : http://nuricle.tistory.com/entry/MS-SQL-%EB%82%98%EB%8F%84-Try-Catch-%EC%82%AC%EC%9A%A9%ED%95%9C%EB%8B%A4-%E3%85%8E

'DataBase > SQL Server' 카테고리의 다른 글

sp 파라메타 만들기  (0) 2015.04.08
음/양 변환 데이타  (0) 2015.03.20
MS-SQL Table List 및 Column 정보 불러오기  (0) 2015.01.15
MS-SQL LPAD RPAD 따라하기  (0) 2015.01.15
MS-SQL 자체 암호화 처리 방법  (0) 2015.01.15

관련글 더보기