투케이2K

77. (MYSQL/SQL) 프로시저 (PROCEDURE) - 관리자 홈페이지 로그인 수행 실시 본문

MySqlDB

77. (MYSQL/SQL) 프로시저 (PROCEDURE) - 관리자 홈페이지 로그인 수행 실시

투케이2K 2022. 7. 6. 13:16

[개발 환경 설정]

개발 툴 : Heidi

개발 언어 : Mysql

 

[소스 코드]

/**************************************************************/
-- [DELIMITER : 프로시저 앞,뒤의 위치하여 안에 있는 부분은  한번에 실행]
DELIMITER $$
/**************************************************************/
DROP PROCEDURE IF EXISTS PRO_ADMIN_LOGIN; -- [이미 생성된 프로시저가 있으면 DROP]
CREATE PROCEDURE PRO_ADMIN_LOGIN -- [프로시저 생성]
(
    IN I_ID    VARCHAR(500) CHARACTER SET UTF8,     -- [인풋 : 필수 : 사용자 아이디 : UMCS_ADMIN 테이블에 등록 필요]
    IN I_PASS  VARCHAR(500) CHARACTER SET UTF8,     -- [인풋 : 필수 : 사용자 비번 : UMCS_ADMIN 테이블에 등록 필요]

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

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


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


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


[설 명] : 관리자 로그인 수행 및 사용자 정보 반환 프로시저 (UMCS_ADMIN 테이블 등록)


[프로시저 호출] :

CALL PRO_ADMIN_LOGIN('admin', 'admin@kr', @O_MSG);
SELECT @O_MSG;


[프로시저 리턴] : MSG , TABLE


[프로시저 삭제] :

DROP PROCEDURE PRO_ADMIN_LOGIN;


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

SHOW PROCEDURE STATUS;

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


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

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

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

[3] : 인풋 값으로 들어온 사용자 아이디 및 비밀번호 UMCS_MAST 테이블에 등록된 여부 확인 실시

[4] : UMCS_ADMIN 테이블 조회 수행 실시
***************************************************************/


    -- [전역 변수 선언]
    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), ']');

        -- [리턴 테이블 반환]
        SELECT *
            FROM UMCS_ADMIN
        LIMIT 0;

    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_ID IS NULL OR TRIM(I_ID) = '' OR LENGTH(I_ID) = 0
        OR I_PASS IS NULL OR TRIM(I_PASS) = '' OR LENGTH(I_PASS) = 0
       THEN

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

       -- [리턴 테이블 반환]
       SELECT *
            FROM UMCS_ADMIN
       LIMIT 0;

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

    END IF;





    -- [3] : 인풋 값으로 들어온 사용자 아이디 및 비밀번호 UMCS_MAST 테이블에 등록된 여부 확인 실시
    SET M_DEBUG = '3'; -- [디버깅 단계]

    SET M_USER_COUNT = (
            SELECT COUNT(*)
                FROM UMCS_ADMIN
            WHERE TRIM(ADMIN_ID) = TRIM(I_ID)
              AND TRIM(ADMIN_PWD) = TRIM(I_PASS)
        );

        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), ']');


           -- [로그인 이력 관리 테이블에 insert 수행 실시]
           START TRANSACTION;
           INSERT INTO UMCS_MOCO (MOCO_IDNO, MOCO_ID, MOCO_PASS, MOCO_FLAT, MOCO_MOCO, MOCO_FLAG, MOCO_MSG, MOCO_UPDT)
           VALUES ('', I_ID, I_PASS, 'web', '', 'N', O_MSG, M_DATE);
           COMMIT;


           -- [리턴 테이블 반환]
           SELECT *
                FROM UMCS_ADMIN
           LIMIT 0;


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





    -- [4] : UMCS_ADMIN 테이블 조회 수행 실시
    SET M_DEBUG = '4'; -- [디버깅 단계]

    -- [리턴 데이터 삽입]
    SET O_MSG = CONCAT('Y : 관리자 로그인 성공 (web) : M_DEBUG : [', CAST(M_DEBUG AS CHAR), ']');

    -- [로그인 이력 관리 테이블에 insert 수행 실시]
    START TRANSACTION;
    INSERT INTO UMCS_MOCO (MOCO_IDNO, MOCO_ID, MOCO_PASS, MOCO_FLAT, MOCO_MOCO, MOCO_FLAG, MOCO_MSG, MOCO_UPDT)
    VALUES ('', I_ID, I_PASS, 'web', '', 'Y', O_MSG, M_DATE);
    COMMIT;

    -- [리턴 테이블 반환]
    SELECT *
        FROM UMCS_ADMIN
    WHERE TRIM(ADMIN_ID) = TRIM(I_ID)
      AND TRIM(ADMIN_PWD) = TRIM(I_PASS)
    LIMIT 1;

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


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

[결과 출력]

 

 

반응형
Comments