ABOUT ME

-

오늘 방문자
-
어제 방문자
-
전체
-
  • [MSSQL] SP 에러처리
    DB 2018. 10. 28. 23:00
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    CREATE PROCEDURE  [dbo].[SP_TEMP_INSERT_ERROR_LOG](
        @pi_name varchar(50)=''
        ,@pi_age int
     
    ) AS
     
    BEGIN 
      --  DECLARE @crud_count    BIGINT ;
        
        DECLARE @sp_name    NVARCHAR(100)  -- 프로시저 이름
                ,@sp_start_date    VARCHAR(25-- 프로시저 실행날짜
                ,@sp_end_date    VARCHAR(25-- 프로시저 종료 날짜
                ,@error_line    VARCHAR(50-- 에러라인
                ,@error_msg    NVARCHAR(MAX) -- 에러메세지
                ,@error_number    VARCHAR(50-- 에러행
                ,@error_severity    VARCHAR(50-- 에러심각도
                
          SET NOCOUNT ON
          -- SET XACT_ABORT ON
          
          SET @sp_name = 'SP_TEMP_INSERT_ERROR_LOG';
    /**
        IF XACT_STATE() = -1
            BEGIN
                GOTO ERRORHANDLER;
            END
            **/
        
     
        BEGIN TRY  
            print 'TRY 실행';
            SET @sp_start_date = CONVERT(VARCHAR(25), GETDATE(), 121);
     
            BEGIN TRAN
                
                INSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, @pi_age);
                INSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, '에러발생시키기'); -- 에러발생 
                INSERT INTO T_TEMP (TEMP_NAME, TEMP_AGE) VALUES(@pi_name, @pi_age+2); 
            
            COMMIT TRAN;
            PRINT '커밋 성공'
     
        END TRY 
        BEGIN CATCH
            PRINT 'CATCH 실행';
            
            SELECT @error_line=ERROR_LINE(), @error_number=ERROR_NUMBER(), @error_msg=ERROR_MESSAGE(), @error_severity=ERROR_SEVERITY()
            
            SET @sp_end_date=CONVERT(varchar(25), GETDATE(), 121);
     
            PRINT '에러발생 SP명 ===> ' + @sp_name
            PRINT '에러라인 ===> ' + @error_line
            PRINT '에러발생시간 ===> ' + @sp_end_date 
            PRINT '에러번호 ===> ' + @error_number
            PRINT '에러 메세지 ===> ' + @error_msg 
            PRINT '에러 심각도 ===> '+ @error_severity
     
            ROLLBACK TRAN
        END CATCH
     
    END 
     -- ERRORHANDLER:
    --    print 'ERRORHANDLER 실행'
    --    IF XACT_STATE() <> 0
    --        PRINT '롤백성공';
    --        ROLLBACK TRAN ;
     
        
     
    cs




    1
    exec SP_TEMP_INSERT_ERROR_LOG '민'28
    cs







    ERROR_SEVERITY() - 에러심각도

    11~16 : 사용자가 해결 할 수 있는 일반적인 에러

    17~19 : 사용자가 해결 할 수 없는 SW오류

    20~24 : 시스템의 매우 심각한 오류를 나타냄 


    자세한 사항은 아래 링크에서 확인

    https://docs.microsoft.com/ko-kr/sql/relational-databases/errors-events/database-engine-error-severities?view=sql-server-2017



    'DB' 카테고리의 다른 글

    [MariaDB] now()와 sysdate()의 차이점  (0) 2018.11.07
    테이블 엑세스과정  (0) 2018.10.29
    DB 샘플 데이터 생성하는 사이트  (0) 2018.10.20
    [MSSQL] 통계(Statistics)보기  (0) 2018.10.15
    DEADLOCK_PRIORITY  (0) 2018.09.27

    댓글

Designed by Tistory.