SQL

PROCEDURE 프로시저 끄적거리기 (CURSOR,RETURN)

dev.mk 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'

 

반응형