Notice
Recent Posts
Recent Comments
Link
투케이2K
46. (MSSQL/SQL) 프로시저 (procedure) 사용해 사용자 정보 update 업데이트 처리 및 커밋 (commit) 수행 실시 본문
MsSqlDB
46. (MSSQL/SQL) 프로시저 (procedure) 사용해 사용자 정보 update 업데이트 처리 및 커밋 (commit) 수행 실시
투케이2K 2022. 4. 2. 14:33[개발 환경 설정]
개발 툴 : SSMS
개발 언어 : MSSQL
[소스 코드]
/***************************************************************/
--CREATE PROCEDURE USER_PROC -- [생성]
ALTER PROCEDURE USER_PROC -- [수정]
(
@IN_NAME NVARCHAR(100), -- [인풋 : 이름]
@IN_AGE NVARCHAR(100), -- [인풋 : 나이]
@OUT_MSG NVARCHAR(100) OUTPUT -- [출력 : 파라미터]
)
/***************************************************************
설명 - 이름과 나이를 인풋값으로 받아서 해당 이름을 사용하는 사용자 나이 업데이트 수행 실시
---------------------------------------------------------------
프로시저 생성 조회 : sp_helptext 'dbo.USER_PROC'
---------------------------------------------------------------
프로시저 호출 :
-- [변수 선언]
DECLARE @IN_NAME NVARCHAR(100);
DECLARE @IN_AGE NVARCHAR(100);
DECLARE @OUT_MSG NVARCHAR(100);
-- [인풋 값 대입 실시]
SET @IN_NAME = '홍길동';
SET @IN_AGE = '50';
-- [프로시저 호출]
EXEC USER_PROC @IN_NAME, @IN_AGE, @OUT_MSG OUTPUT;
-- [OUTPUT 리턴 상태 확인]
SELECT @OUT_MSG AS '프로시저 수행 결과';
---------------------------------------------------------------
프로시저 삭제 : DROP PROCEDURE USER_PROC
***************************************************************/
AS
/**************** [프로시저 전역 변수 선언 실시] ***************/
DECLARE @V_STEP NVARCHAR(100);
DECLARE @V_DATE NVARCHAR(100);
DECLARE @V_LOG NVARCHAR(500);
/************** [프로시저 동작 쿼리문 작성 실시] ***************/
BEGIN TRY
/*=========================================================*/
-- [로직 : 스텝 저장]
SET @V_STEP = '1';
-- [프로시저 수행 날짜 및 시간 확인]
SET @V_DATE = CONVERT(CHAR(19), getDate(), 20);
-- [로그 출력 실시]
SET @V_LOG = '[STEP = ' + @V_STEP + '] ' + '[DATE = ' + @V_DATE + ']';
PRINT '========================================='
PRINT @V_LOG
PRINT '========================================='
/*=========================================================*/
-- [로직 : 스텝 저장]
SET @V_STEP = '2';
-- [로그 출력 실시]
SET @V_LOG = '[STEP = ' + @V_STEP + '] ' + '[IN_NAME = ' + @IN_NAME + '] ' + '[IN_AGE = ' + @IN_AGE + ']';
PRINT '========================================='
PRINT @V_LOG
PRINT '========================================='
-- [사전 인풋 데이터 체크 수행 실시]
IF LEN(TRIM(@IN_NAME)) = 0 OR TRIM(@IN_NAME) = '' OR LEN(TRIM(@IN_AGE)) = 0 OR TRIM(@IN_AGE) = ''
BEGIN
-- [메시지 출력]
SET @OUT_MSG = 'N: 인풋 데이터 값을 확인해 주세요. [STEP = ' + @V_STEP + '] ' + '[' + @V_DATE + ']';
PRINT '========================================='
PRINT @OUT_MSG
PRINT '========================================='
-- [리턴 처리]
RETURN (0);
END
/*=========================================================*/
-- [로직 : 스텝 저장]
SET @V_STEP = '3';
-- [인풋으로 들어온 데이터 값에 맞게 조회 수행 실시]
DECLARE @V_COUNT INT;
SELECT @V_COUNT = COUNT(*)
FROM TEST_USER
WHERE T_NAME = @IN_NAME;
-- [로그 출력 실시]
SET @V_LOG = '[STEP = ' + @V_STEP + '] ' + '[COUNT = ' + CONVERT(VARCHAR, @V_COUNT) + ']';
PRINT '========================================='
PRINT @V_LOG
PRINT '========================================='
/*=========================================================*/
-- [조회된 카운트 값에 따라서 업데이트 여부 결정 실시]
IF (@V_COUNT != 0)
BEGIN
-- [로직 : 스텝 저장]
SET @V_STEP = '4-1';
-- [트랜 잭션 커밋 동작 수행]
BEGIN TRAN
-- [UPDATE 문 수행 실시]
UPDATE TEST_USER SET T_AGE = @IN_AGE WHERE T_NAME = @IN_NAME;
-- [업데이트 수행 에러 체크 실시]
IF @@ERROR <> 0
BEGIN
-- [로그 출력 실시]
SET @V_LOG = '[STEP = ' + @V_STEP + '] ' + '[ERROR = ' + CONVERT(VARCHAR, @@ERROR) + ']';
PRINT '========================================='
PRINT @V_LOG
PRINT '========================================='
-- [메시지 출력]
SET @OUT_MSG = 'N: 업데이트 처리 중 문제가 발생했습니다. [STEP = ' + @V_STEP + '] ' + '[' + @V_DATE + ']';
PRINT '========================================='
PRINT @OUT_MSG
PRINT '========================================='
-- [롤백 처리]
ROLLBACK TRAN
-- [리턴 처리]
RETURN (0);
END
COMMIT TRAN
-- [업데이트 수행 후 사용자 데이터 출력]
SELECT *
FROM TEST_USER
WHERE T_NAME = @IN_NAME;
-- [메시지 출력]
SET @OUT_MSG = 'Y: 정상 처리 되었습니다. [STEP = ' + @V_STEP + '] ' + '[' + @V_DATE + ']';
PRINT '========================================='
PRINT @OUT_MSG
PRINT '========================================='
-- [리턴 처리]
RETURN (1);
END
ELSE
BEGIN
-- [로직 : 스텝 저장]
SET @V_STEP = '4-2';
-- [메시지 출력]
SET @OUT_MSG = 'N: 조회된 데이터가 없습니다. [STEP = ' + @V_STEP + '] ' + '[' + @V_DATE + ']';
PRINT '========================================='
PRINT @OUT_MSG
PRINT '========================================='
-- [리턴 처리]
RETURN (0);
END
/*=========================================================*/
END TRY
/************** [프로시저 예외 발생 처리 실시] ***************/
BEGIN CATCH
-- [메시지 출력]
SET @OUT_MSG = 'N: 예외 상황이 발생했습니다. [STEP = ' + @V_STEP + '] ' + '[' + @V_DATE + ']';
PRINT '========================================='
PRINT @OUT_MSG
PRINT '========================================='
-- [리턴 처리]
RETURN (0);
END CATCH
/**************** [프로시저 종료 처리 부분] ******************/
GO
/*************************************************************/
[결과 출력]
반응형
'MsSqlDB' 카테고리의 다른 글
Comments