SQL Server 2005에 새롭게 추가된 try catch는 예외를 쉽게 잡아낼 수 있는 기능입니다. 오늘은 이를 살펴보고
기본적인 사용법을 정리해 보겠습니다. BEGIN TRY.
{ sql_statement |
성명_블록 }
시도 종료
잡기 시작
{ sql_statement |
성명_블록 }
엔드캐치
, 일반 언어의 예외 처리 사용법과 비슷하지만 SQL SERVER는 심각하지 않은 예외만 catch합니다. 데이터베이스에 연결할 수 없는 경우 등의 경우는 catch할 수 없습니다. 시도해 보세요
@X INT 선언
-- 0으로 나누면 오류가 발생합니다.
세트 @X = 1/0
PRINT 'TRY 블록에서 오류 후 명령'
시도 종료
잡기 시작
PRINT '오류가 감지되었습니다'
엔드캐치
PRINT 'TRY/CATCH 블록 뒤의 명령'
또한 Try catch는 Begin TRY에 중첩될 수 있습니다.
이름 = 'John Smith'인 GrandParent에서 삭제
'GrandParent가 성공적으로 삭제되었습니다'를 인쇄하세요.
시도 종료
캐치 시작
'조부모 기록 삭제 오류' 인쇄
시작하다
GrandParentID =인 상위 항목에서 삭제
(이름 = 'John Smith'인 GrandParent의 고유 ID 선택)
'부모가 성공적으로 삭제되었습니다' 인쇄
시도 종료
캐치 시작
'상위 삭제 오류' 인쇄
시작하다
ParentId =인 하위 항목에서 삭제
(GrandParentID가 =인 경우 상위에서 고유한 ID를 선택합니다.
(이름 = 'John Smith'인 GrandParent의 고유 ID 선택))
'자녀가 성공적으로 삭제되었습니다'를 인쇄하세요.
시도 종료
캐치 시작
'자녀 삭제 오류' 인쇄
엔드캐치
엔드캐치
엔드캐치
또한 SQL SERVER 2005는 디버깅을 용이하게 하기 위해 예외 메커니즘에 오류 클래스 메서드를 제공합니다. 이는 비교적 간단하므로 설명하지 않습니다. ERROR_NUMBER(): 오류와 관련된 숫자를 반환합니다. 오류의 심각도를 반환합니다.ERROR_STATE(): 오류와 관련된 오류 상태 번호를 반환합니다.ERROR_PROCEDURE(): 오류가 발생한 저장 프로시저 또는 트리거의 이름을 반환합니다.ERROR_LINE(): 오류 내부의 줄 번호를 반환합니다. ERROR_MESSAGE(): 오류 메시지의 전체 텍스트를 반환합니다. 텍스트에는 길이, 개체 이름 또는 시간과 같은 대체 가능한 매개변수에 제공된 값이 포함됩니다. 오류 클래스 메소드 BEGIN TRY 사용
@X INT 선언
-- 0으로 나누면 오류가 발생합니다.
세트 @X = 1/0
PRINT 'TRY 블록에서 오류 후 명령'
시도 종료
잡기 시작
PRINT '오류가 감지되었습니다'
SELECT ERROR_NUMBER() ERN번호,
ERROR_SEVERITY() 오류_심각도,
ERROR_STATE() 오류_상태,
ERROR_PROCEDURE() 오류_프로시저,
ERROR_LINE() 오류_라인,
ERROR_MESSAGE() 오류_메시지
엔드캐치
PRINT 'TRY/CATCH 블록 뒤의 명령'
마지막으로 오류 감지가 출력되었습니다.
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- ------- ------- ----------------------------------
8134 16 1 NULL 4 0으로 나누기 오류가 발생했습니다.
출처: jackyrong BLOG