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'
반응형