ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PROCEDURE 프로시저 끄적거리기 (CURSOR,RETURN)
    SQL 2024. 3. 24. 19:25
    반응형

     

    프로시저가 return이 잘되는지

    커서가 잘 작동하는지

    예외상황시 프로시저를 빠져나가는 return이 되는지

    그런것들을 끄적인 프로시저임.

    CREATE PROCEDURE dbo.TEST_PROC
        @ERROR_MSG         VARCHAR(1000) OUTPUT,    -- 응답 에러 메세지
        @MEMBER_NO         INT,                     -- 현재 회원번호(기준)
        @MEMBER_NO_LIST    VARCHAR(1000)            -- 체크대상 회원번호
    AS 
    BEGIN
        DECLARE @STEP_MSG VARCHAR(100)
        DECLARE @FROM_MEMBER_NO INT, @CUS_CLEAR_SEQ INT
        , @TOTAL_CUS_LIST VARCHAR(1050) = 
        CONVERT(VARCHAR(10), @MEMBER_NO) + ',' + ISNULL(@MEMBER_NO_LIST, '')	
    
        -- 현재 회원과 병합될 회원 콤마 단위로 합치기
        PRINT @TOTAL_CUS_LIST;
    
        -- 회원번호가 널이거나 1이면 리턴시킨다.
        IF @MEMBER_NO IS NULL OR @MEMBER_NO IN (0, 1)
        BEGIN
            SET @ERROR_MSG = N'[Case 1. Invalid MemberNo.]';
            RETURN; -- 프로시저를 완전히 빠져나가는 리턴이다.
        END
        
        ------------------------------------
        -- 회원번호가 2면 리턴시킨다.
        IF @MEMBER_NO = 2
        BEGIN
            -- 특정 값이나 메시지를 리턴합니다.
            SET @ERROR_MSG = N'[Case 2. Invalid MemberNo.]';
            RETURN; -- 프로시저를 완전히 빠져나가는 리턴이다.
        END
    	-------------------------------------
        -- 커서 진입전 메세지 출력하기.
        PRINT N'Run Cursor Ready';
       
        -- 한건씩 커서 처리 
        DECLARE USER_CURSOR CURSOR FOR
        SELECT DATA -- 콤마를 자르는 함수는 리턴이 테이블형이고 DATA라는 컬럼이 정의되어있다.
        FROM DBO.FN_XML_SPLIT(@MEMBER_NO_LIST, ',')
    	
        OPEN USER_CURSOR
        FETCH NEXT FROM USER_CURSOR	INTO @FROM_MEMBER_NO
        WHILE @@FETCH_STATUS = 0
    	
        BEGIN
        -------------------------------------------------------------------------------------------------------------------
            -- 콤마단위로 자른 값을 출력하기
            PRINT @FROM_MEMBER_NO	
        -------------------------------------------------------------------------------------------------------------------
            FETCH NEXT FROM USER_CURSOR	INTO @FROM_MEMBER_NO
        END
        
        CLOSE USER_CURSOR 	-- 커서를 닫는다.
        DEALLOCATE USER_CURSOR -- 사용이 끝난 커서를 메모리에서 해제한다.
    END

     

    실행하기

    DECLARE @RETURN_ERROR_MESSAGE VARCHAR(1000)
    DECLARE @MEMBER_NO INT = 1
    DECLARE @MEMBER_NO_LIST VARCHAR(1000) = '11,22,33,44,55'
    
    EXEC dbo.TEST_PROC 
        @ERROR_MSG = @RETURN_ERROR_MESSAGE OUTPUT,
        @MEMBER_NO = @MEMBER_NO,
        @MEMBER_NO_LIST = @MEMBER_NO_LIST
    
    -- OUTPUT 매개변수 값 출력
    SELECT @RETURN_ERROR_MESSAGE AS N'RETURN_ERROR_MESSAGE'

     

    반응형

    댓글

Designed by Tistory.