Intro
안녕하세요
초보 DBA 다뉴입니다.
오늘은 MsSQL의 Exception 처리를 위해 사용하는
Try~Catch Block에 대해서 한번 알아보도록 하겠습니다.
구문의 에러가가 발생하였을 때 에러에 대한 예외처리를 하는 것인데요.
T-SQL이 실행 중 에러가 발생할 경우 심각도에 따라 바로 종료가 되거나, 트랜젝션에 문제가 발생 할 수 있습니다.
이러한 경우를 예외처리를 통하여 방지하는 역할을 합니다.
Try, Catch, Finally
begin try
/* 실행할 명령문 */
end try
begin catch
/* 예외처리 명령문 */
end catch
Try
- begin try ~ end try로 감싸야 한다.
- 오류가 발생할 가능성이 있는 실행할 명령문을 넣는다.
- 오류 없이 실행이 end try 도달시 Catch 생략하며, end catch문 뒤에 명령문을 실행한다.
Catch
- end try 뒤에 바로 와야한다.
- begin catch ~ end catch로 감싸야 한다.
- Try 블록에 오류 발생시 실행할 명령문을 넣는다.
- 오류가 발생하면 즉시 Catch 블록을 실행한다.
- end catch 도달시 end catch문 뒤에 명령문을 실행한다.
- catch 블록에 의해 트랩 된 오류는 응용프로그램으로 리턴되지 않는다.
Finally
- MsSQL에는 없다.
- Try, Catch 블록이 끝나면 end catch뒤에 명령어를 실행하기때문에 사실상 Finally
추가 사항
- 데이터베이스 연결을 종료되지 않는 심각도가 10 이상인 모든 실행 오류를 캐치한다.
- 심각하지 않은 오류 심각도 10 이하에 대해서는 캐치하지 않는다.
- 연결이 종료되면 실행이 종료되기 때문에 일반적으로 심각도 20~25의 데이터베이스 연결을 종료하는 오류는 Catch 블록에서 처리되지 않는다.
반응형
- try~catch는 중첩이 가능하다.
- Catch 블록에서 실행가능한 함수
- ERROR_NUMBER() 는 오류 번호를 반환합니다.
- ERROR_SEVERITY() 는 심각도를 반환합니다.
- ERROR_STATE() 는 오류 상태 번호를 반환합니다.
- ERROR_PROCEDURE() 는 오류가 발생한 저장 프로 시저 또는 트리거의 이름을 반환합니다.
- ERROR_LINE() 은 오류를 일으킨 루틴 내부의 행 번호를 리턴합니다.
- ERROR_MESSAGE() 는 오류 메시지의 전체 텍스트를 반환합니다.텍스트에는 길이, 오브젝트 이름 또는 시간과 같은 대체 가능한 매개 변수에 제공된 값이 들어 있습니다.
create table #TB_Test(
seq int, -- 실행 순서
txt varchar(100), -- 실행 내용
err varchar(100) -- error 내용
)
begin try
insert into #TB_Test values(1, 2/1, '정상 실행')
insert into #TB_Test values(2, 2/0, '0으로 나눈다')
end try
begin catch
select 'ERROR_NUMBER() ', cast(ERROR_NUMBER() as varchar(100)) union all
select 'ERROR_SEVERITY()', cast(ERROR_SEVERITY() as varchar(100)) union all
select 'ERROR_STATE()', cast(ERROR_STATE() as varchar(100)) union all
select 'ERROR_PROCEDURE()', cast(ERROR_PROCEDURE() as varchar(100)) union all
select 'ERROR_LINE()', cast(ERROR_LINE() as varchar(100)) union all
select 'ERROR_MESSAGE()', cast(ERROR_MESSAGE() as varchar(100))
select * from #TB_Test
end catch
Outro
Try ~ Catch문에 대한 기초에 대해 알아보았습니다.
해당 구문을 begin tran과 함께 사용하여
트랜젝션의 무결성을 유지하는 데에 사용하거나, 특정 상황에서 오류를 발생 시키는 등의
좀더 업무적으로 사용할 수 있는 방법들이 있는데요.
해당 내용에 대해서는 다음 포스팅에 알아보도록 하겠습니다!
감사합니다.
반응형
'DATABASE > MsSQL' 카테고리의 다른 글
[MsSQL] Table / Column Comment - 코멘트, 설명 달기 (1) | 2023.08.01 |
---|---|
[MsSQL] Exception / Try~Catch 문 활용 -Transaction, Throw (1) | 2023.07.30 |
[MsSQL] Database File 디스크 이동 DBA 실무 - detach / attach (1) | 2023.07.27 |
[DBA][MsSQL] 자주 쓰는 쿼리 - Table Description / 테이블 정보 (3) | 2023.07.25 |
[DBA][MsSQL] 자주 쓰는 쿼리 - Agent 조회 쿼리 (4) | 2023.07.24 |
[MsSQL] Database File(Data File, Log File) / File Group (1) | 2023.07.14 |
[MsSQL] GETDATE() / CONVERT() - 날짜,시간 변환 표 / 날짜 포맷 (0) | 2023.07.09 |
[MsSQL] 여러 행 문자열 합치기 - For Xml Path() / Stuff() 알아가기 (0) | 2023.06.26 |