[MS-SQL] TRY...CATCH(Transact-SQL)

구문

---------------------------------------------------------------------------
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
{ sql_statement | statement_block }
END CATCH
[ ; ]
---------------------------------------------------------------------------

주의
TRY...CATCH 구문은 심각도가 10을 넘으며 데이터베이스 연결을 끊지 않는 모든 실행 오류를 포착합니다.

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

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

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

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

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

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

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

저장 프로시저가 자체적인 TRY...CATCH 구문을 포함하지 않는 경우 오류가 발생하면 EXECUTE 문을 포함하는 TRY 블록과 연관된 CATCH 블록으로 제어가 반환됩니다.


저장 프로시저가 TRY...CATCH 구문을 포함하는 경우 오류가 발생하면 저장 프로시저의 CATCH 블록으로 제어가 전달됩니다. CATCH 블록 코드를 완료하면 해당 저장 프로시저를 호출한 EXECUTE 문 바로 다음 문으로 제어가 전달됩니다.


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

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

오류 정보 검색
CATCH 블록의 범위 내에서 다음 시스템 함수를 사용하여 CATCH 블록을 실행하도록 만든 오류에 대한 정보를 얻을 수 있습니다.

● ERROR_NUMBER()는 오류 번호를 반환합니다.


● ERROR_SEVERITY()는 심각도를 반환합니다.


● ERROR_STATE()는 오류 상태 번호를 반환합니다.


● ERROR_PROCEDURE()는 오류가 발생한 저장 프로시저 또는 트리거의 이름을 반환합니다.


● ERROR_LINE()은 오류가 발생한 루틴 내의 줄 번호를 반환합니다.


● ERROR_MESSAGE()는 오류 메시지의 전체 텍스트를 반환합니다. 이 텍스트는 길이, 개체 이름 또는 시간과 같은 대체 가능한 매개 변수에 제공된 값을 포함합니다.


CATCH 블록의 범위를 벗어나 이 함수들을 호출하면 NULL이 반환됩니다. CATCH 블록의 범위 내 어디에서나 이들 함수를 사용하여 오류 정보를 검색할 수 있습니다. 예를 들어 다음 스크립트는 오류 처리 함수를 포함하는 저장 프로시저를 보여 줍니다. TRY...CATCH 구문의 CATCH 블록에서 이 저장 프로시저를 호출하면 오류에 대한 정보가 반환됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/22 11:40 2009/01/22 11:40
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3918

Trackback URL : http://tcbs17.cafe24.com/tc/trackback/3918

« Previous : 1 : ... 2515 : 2516 : 2517 : 2518 : 2519 : 2520 : 2521 : 2522 : 2523 : ... 6391 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
Statistics Graph

Site Stats

Total hits:
250696
Today:
675
Yesterday:
295