'예외처리'에 해당되는 글 2건
- 2018.08.16 [MSSQL] try..catch..rollback 예제
- 2014.02.12 [Delphi] 예외처리 구분 경우 (try/except/finally)
320x100
[MSSQL] try..catch..rollback 예제
Posted on 2018. 8. 16. 14:17
Filed Under DB
ALTER PROCEDURE dbo.INSERT_ACTION_HISTORY
--CREATE PROCEDURE dbo.INSERT_ACTION_HISTORY
@ResultDate datetime,
@LOGID bigint,
@ActionCode int,
@Description varchar(500) = NULL
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
BEGIN TRY
INSERT INTO TBL_SAMPLE (LOGID, ActionCode, Description, UpdateDate)
VALUES (@LOGID, @ActionCode, @Description, GETDATE());
END TRY
BEGIN CATCH
-- 파라미터 정보도 저장 가능 (스트링 만들때 오류 안나도록 반드시 테스트 후에 적용할 것)
DECLARE @ParamInfo VARCHAR(1000) = '';
SET @ParamInfo =
'입력파라미터: '
+ '@ResultDate=[' + ISNULL(CONVERT(VARCHAR(19), @ResultDate, 120), 'null')
+ '], @LOGID=['+CASE WHEN @LOGID IS NULL THEN 'null' ELSE CAST(@LOGID AS VARCHAR) END
+ '], @ActionCode=['+CASE WHEN @ActionCode IS NULL THEN 'null' ELSE CAST(@ActionCode AS VARCHAR) END
+ '], @Description=['+CASE WHEN @Description IS NULL THEN 'null' ELSE SUBSTRING(@Description, 0, 100) END
+ ']';
PRINT @ParamInfo;
-- 이 부분에서 DB에러 이력 테이블에 저장하거나 출력
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;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH
BEGIN
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
END
ADD 2019.08.13 ErrorLog테이블 생성 및 에러발생 기록 예제
반응형
[Delphi] 예외처리 구분 경우 (try/except/finally)
Posted on 2014. 2. 12. 17:50
Filed Under Delphi
Application.MessageBox(PChar('시작'), '정보', MB_ICONINFORMATION);
// try문 외부에서 예외발생 경우
raise Exception.Create('예외경우 발생!'); // 아래 finally 구문 미실행 + Exit()
// try문 외부에서 Exit()할 경우
if 조건 then Exit(); // 아래 try..finally와 관계 없이 종료
try
try
...
raise Exception.Create('예외발생!'); // except + finally + next 을 모두 수행
Exit(); // except + finally + next 을 모두 수행(=Exception.Create 와 함께 사용할 필요없는 구문)
...
raise Exception.Create('예외발생!'); // except + finally + next 을 모두 수행
...
except
on e: Exception do
begin
// 예외 발생시에만 수행 - finally + next 수행
Application.MessageBox(PChar(e.Message), PChar('에러'), MB_ICONERROR + MB_OK);
except
on e: Exception do
begin
// 예외 발생시에만 수행 - finally + next 수행
Application.MessageBox(PChar(e.Message), PChar('에러'), MB_ICONERROR + MB_OK);
Exit(); // finally 까지 수행하고 종료 (next 미수행)
end;
end;
finally
// 예외 발생 여부 및 try구문 내의 Exit() 유무에 상관없이 무조건 수행되는 구문
FreeAndNill(obj);
end;
end;
end;
finally
// 예외 발생 여부 및 try구문 내의 Exit() 유무에 상관없이 무조건 수행되는 구문
FreeAndNill(obj);
end;
Application.MessageBox(PChar('next'), PChar('next'), MB_ICONERROR + MB_OK);
반응형