투케이2K

63. (MYSQL/SQL) 프로시저 (PROCEDURE) - 사용자 디바이스 단말 고유 값 초기화 실시 본문

MySqlDB

63. (MYSQL/SQL) 프로시저 (PROCEDURE) - 사용자 디바이스 단말 고유 값 초기화 실시

투케이2K 2022. 6. 16. 16:23
반응형

[개발 환경 설정]

개발 툴 : Heidi

개발 언어 : Mysql

 

[소스 코드]

/**************************************************************/
-- [DELIMITER : 프로시저 앞,뒤의 위치하여 안에 있는 부분은  한번에 실행]
DELIMITER $$
/**************************************************************/
DROP PROCEDURE IF EXISTS PRO_DEL_MOCO; -- [이미 생성된 프로시저가 있으면 DROP]
CREATE PROCEDURE PRO_DEL_MOCO -- [프로시저 생성]
(
    IN I_TYPE    VARCHAR(500) CHARACTER SET UTF8,     -- [인풋 : 필수 : 개별 초기화 및 전체 초기화 여부 : 1=전체 초기화 / 2=개별 초기화]
    IN I_IDNO    VARCHAR(100) CHARACTER SET UTF8,     -- [인풋 : 사용자 학번]
    IN I_IDDI  VARCHAR(50) CHARACTER SET UTF8,        -- [인풋 : 사용자 신분]

    OUT O_MSG VARCHAR(1000) CHARACTER SET UTF8        -- [리턴 : 메시지]
)
/**************************************************************/


/**************************************************************/
PROC_BODY : BEGIN
/**************************************************************/


/***************************************************************
[프로시저 설명]


[설 명] : 사용자에게 매핑된 디바이스 고유값 초기화 프로시저


[프로시저 호출] [개별 초기화] :

CALL PRO_DEL_MOCO('2', '9999999990', '1', @O_MSG);
SELECT @O_MSG;


[프로시저 호출] [전체 초기화] :

CALL PRO_DEL_MOCO('1', '', '', @O_MSG);
SELECT @O_MSG;


[프로시저 리턴] : MSG


[프로시저 삭제] :

DROP PROCEDURE PRO_DEL_MOCO;


[프로시저 생성 목록 확인] :

SHOW PROCEDURE STATUS;

***************************************************************/


/***************************************************************
[로직 정리 : M_DEBUG]

[1] : 현재 날짜 및 시간 데이터 변수에 지정 실시

[2] : 인풋 데이터 널 체크 수행 실시

[3] : 인풋 값으로 들어온 타입에 맞게 개별 및 전체 초기화 분기 처리 실시
***************************************************************/


    -- [전역 변수 선언]
    DECLARE M_DEBUG VARCHAR(100) CHARACTER SET UTF8 DEFAULT ''; -- [디버깅 단계]
    DECLARE M_DATE VARCHAR(100) CHARACTER SET UTF8 DEFAULT ''; -- [현재 날짜 및 시간]

    DECLARE M_USER_COUNT INTEGER DEFAULT 0; -- [UMCS_MAST 테이블에서 같은 학번 및 같은 신분값이 다중인 경우 체크]





    -- [SQL 수행 EXCEPTION 처리]
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        -- [롤백 처리 실시]
        ROLLBACK;

        -- [리턴 데이터 삽입]
        SET O_MSG = CONCAT('N : EXCEPTION : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');

    END;





    -- [1] : 현재 날짜 및 시간 데이터 변수에 지정 실시
    SET M_DEBUG = '1'; -- [디버깅 단계]

    SET M_DATE = (
        SELECT CAST(DATE_FORMAT(sysdate(), '%Y%m%d%H%i%s') AS CHAR)
    );





    -- [2] : 인풋 데이터 널 체크 수행 실시
    SET M_DEBUG = '2'; -- [디버깅 단계]

    IF I_TYPE IS NULL OR TRIM(I_TYPE) = '' OR LENGTH(I_TYPE) = 0 THEN

       -- [리턴 데이터 삽입]
       SET O_MSG = CONCAT('N : Input Data Is Null : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');

       -- [프로시저 종료]
       LEAVE PROC_BODY;

    END IF;





    -- [3] : 인풋 값으로 들어온 타입에 맞게 개별 및 전체 초기화 분기 처리 실시
    IF TRIM(I_TYPE) = '1' THEN

        SET M_DEBUG = '3-1'; -- [디버깅 단계]


        -- [사용자 전체 디바이스 고유값 초기화 실시 및 분실, 도난 초기화 실시 : UMCS_MAST 테이블]
        START TRANSACTION;
        UPDATE UMCS_MAST SET MAST_MOCO = '', MAST_PLAT = '', MAST_MODT = TRIM(M_DATE), MAST_UPDT = TRIM(M_DATE), MAST_PKEY = '', MAST_KEYDT = ''
            WHERE MAST_IDNO LIKE '%%';
        COMMIT;


        -- [리턴 데이터 삽입]
        SET O_MSG = CONCAT('Y : 전체 사용자 디바이스 값이 초기화 되었습니다. : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');


        -- [프로시저 종료]
        LEAVE PROC_BODY;

    -- ============================================

    ELSEIF TRIM(I_TYPE) = '2' THEN


        SET M_DEBUG = '3-2'; -- [디버깅 단계]


        -- [개별 초기화에 필요한 인풋 데이터 널 체크 실시]
        IF I_IDNO IS NULL OR TRIM(I_IDNO) = '' OR LENGTH(I_IDNO) = 0
            OR I_IDDI IS NULL OR TRIM(I_IDDI) = '' OR LENGTH(I_IDDI) = 0  THEN

           -- [리턴 데이터 삽입]
           SET O_MSG = CONCAT('N : 개별 초기화에 필요한 학번 및 직번 , 신분 값이 올바르지 않습니다. (DATA IS NULL) : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');

           -- [프로시저 종료]
           LEAVE PROC_BODY;

        END IF;


        -- [개별 초기화 시 중복으로 조회되는 학번인지 체크 실시]
        SET M_USER_COUNT = (
            SELECT COUNT(*)
                FROM UMCS_MAST
            WHERE TRIM(MAST_IDNO) = TRIM(I_IDNO)
                AND TRIM(MAST_IDDI) = TRIM(I_IDDI)
        );
        IF M_USER_COUNT != 1 THEN

           -- [리턴 데이터 삽입]
           SET O_MSG = CONCAT('N : 학적에 등록된 사용자 정보를 다시 확인해주세요. (UserCount / ', CAST(M_USER_COUNT AS CHAR) ,') : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');

           -- [프로시저 종료]
           LEAVE PROC_BODY;
        END IF;


        -- [학번 및 신분 데이터를 사용해 디바이스 고유값 초기화 실시 : UMCS_MAST 테이블]
        START TRANSACTION;
        UPDATE UMCS_MAST SET MAST_MOCO = '', MAST_PLAT = '', MAST_MODT = TRIM(M_DATE), MAST_UPDT = TRIM(M_DATE), MAST_PKEY = '', MAST_KEYDT = ''
        WHERE TRIM(MAST_IDNO) = TRIM(I_IDNO)
            AND TRIM(MAST_IDDI) = TRIM(I_IDDI);
        COMMIT;


        -- [리턴 데이터 삽입]
        SET O_MSG = CONCAT('Y : ',CAST(I_IDNO AS CHAR),' 사용자 디바이스 값이 초기화 되었습니다. : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');


        -- [프로시저 종료]
        LEAVE PROC_BODY;

    -- ============================================

    ELSE

        SET M_DEBUG = '3-3'; -- [디버깅 단계]

        -- [리턴 데이터 삽입]
        SET O_MSG = CONCAT('N : 정의되지 않은 초기화 타입 입니다. : [', CAST(M_DEBUG AS CHAR), ']');

        -- [프로시저 종료]
        LEAVE PROC_BODY;

    END IF;


/**************************************************************/
END$$;
DELIMITER ;
/**************************************************************/
 

[결과 출력]

 

 

반응형
Comments