투케이2K

166. (Oracle/오라클) 프로시저 (PROCEDURE) - 사용자 로그인 처리 수행 본문

OracleDB

166. (Oracle/오라클) 프로시저 (PROCEDURE) - 사용자 로그인 처리 수행

투케이2K 2022. 5. 13. 12:26

[개발 환경 설정]

개발 툴 : Toad

개발 언어 : Oracle

 

[소스 코드]

/************************************************************/
CREATE OR REPLACE PROCEDURE PRO_MANAGER_LOGIN
(
  I_ID        IN VARCHAR, -- [필수 : 로그인 아이디]
  I_PW           IN VARCHAR, -- [필수 : 로그인 비밀번호]
                                                                                             
  O_MSG           OUT VARCHAR, -- [리턴 : 메시지]
  O_CURSOR        OUT SYS_REFCURSOR -- [리턴 : 테이블]
)
                                               
/*************************************************************
[설 명] - 매니저 앱 사용자 로그인 처리 실시
-------------------------------------------------------------
[리 턴] - Y : MESSAGE / N : MESSAGE
-------------------------------------------------------------

[프로시져 호출]

EXEC PRO_MANAGER_LOGIN('testid', 'testpw', :AA, :BB);

-------------------------------------------------------------
              
[프로시져 삭제]

DROP PROCEDURE PRO_MANAGER_LOGIN;
              
**************************************************************/


--AS --선택
IS --선택


/******************* [전역변수 생성 및 초기화] *******************/

M_DEBUG  VARCHAR2 (100); -- [디버깅 단계]

M_DATE   VARCHAR2 (100); -- [현재 날짜 및 시간]

M_COUNT  INTEGER; -- [매핑되는 조건 카운트]


/***************** [메인부분 시작 및 커서생성] *******************/
BEGIN


   /*===================================*/
   
   
   -- [디버깅 단계 지정]
   M_DEBUG := '1';
   
   
   -- [현재 날짜 및 시간 데이터 지정]
   M_DATE := TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'); 
   
   /*===================================*/
   
   
   -- [디버깅 단계 지정]
   M_DEBUG := '2'; 
   
   
   -- [필수 인풋 데이터 널 체크 실시]
   IF I_ID IS NULL OR TRIM(I_ID) = ''
      OR I_PW IS NULL OR TRIM(I_PW) = '' 
   THEN 
      BEGIN
          -- [리턴 메시지 삽입]        
          O_MSG := 'N : ' || '인풋 데이터 값을 다시 확인해주세요. [I_ID] [I_PW]' || ' [M_DEBUG : '|| M_DEBUG ||']'; 
          
          -- [리턴 테이블]
          OPEN O_CURSOR FOR 
          SELECT '' AS "DATA_TABLE" 
            FROM DUAL; 
      END;
    
      -- [프로시져 종료]
      RETURN; 
   END IF;
   
   
   /*===================================*/
   
   
   -- [디버깅 단계 지정]
   M_DEBUG := '3'; 
   
   
   -- [등록된 사용자가 있는지 확인]
   SELECT COUNT(*) INTO M_COUNT
          FROM ADMIN_MANAGER
   WHERE TRIM(MGR_ID) = TRIM(I_ID)
       AND TRIM(MGR_PW) = TRIM(I_PW)
   ;
   
   
   --/*
   DBMS_OUTPUT.PUT_LINE(''); 
   DBMS_OUTPUT.PUT_LINE('=============================');     
   DBMS_OUTPUT.PUT_LINE('[PRO_MANAGER_LOGIN] : [' || M_DEBUG || ']');
   DBMS_OUTPUT.PUT_LINE('I_ID : ' || TRIM(I_ID) );
   DBMS_OUTPUT.PUT_LINE('I_PW : ' || TRIM(I_PW) );
   DBMS_OUTPUT.PUT_LINE('M_COUNT : ' || TO_CHAR(M_COUNT));
   DBMS_OUTPUT.PUT_LINE('=============================');
   DBMS_OUTPUT.PUT_LINE(''); 
   --*/
   
   
   -- [카운트 값 확인 실시]
   IF M_COUNT > 0 THEN -- [검색된 데이터가 있는 경우 : 정상 로그인 사용자]
      
      -- [디버깅 단계 지정]
      M_DEBUG := '3-1-1';
         
      BEGIN
          -- [리턴 테이블]
          OPEN O_CURSOR FOR 
            SELECT MGR_UNIV AS 학교 ,
                   MGR_ID AS 아이디 ,
                   MGR_PW AS 비밀번호 ,
                   MGR_NOTE AS 노트 ,
                   MGR_UPDT AS 일자                   
              FROM ADMIN_MANAGER
            WHERE TRIM(MGR_ID) = TRIM(I_ID)
                AND TRIM(MGR_PW) = TRIM(I_PW)
            ;
               
          -- [리턴 메시지 삽입]        
          O_MSG := 'Y : ' || '정상 로그인 성공' || ' [M_DEBUG : '|| M_DEBUG ||']';      
      END;
         
      -- [프로시져 종료]
      RETURN;
         
   ELSE -- [검색된 데이터가 없는 경우 : 등록되지 않은 로그인 사용자]
      
      -- [디버깅 단계 지정]
      M_DEBUG := '3-1-2';
         
      BEGIN
          -- [리턴 메시지 삽입]        
          O_MSG := 'N : ' || '등록된 사용자가 아닙니다. 관리자에게 연락바랍니다.' || ' [M_DEBUG : '|| M_DEBUG ||']'; 
          
          -- [리턴 테이블]
          OPEN O_CURSOR FOR 
            SELECT '' AS "DATA_TABLE" 
               FROM DUAL; 
      END;
    
      -- [프로시져 종료]
      RETURN;
         
   END IF;
   
   
   /*===================================*/
   
   
/***************** [예외 발생 처리 수행 부분] ******************/
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      BEGIN
          -- [리턴 메시지 삽입]        
          O_MSG := 'N : ' || 'EXCEPTION : NO_DATA_FOUND' || ' [M_DEBUG : '|| M_DEBUG ||']'; 
          
          -- [리턴 테이블]
          OPEN O_CURSOR FOR 
          SELECT '' AS "DATA_TABLE" 
            FROM DUAL;
      END;

   WHEN OTHERS
   THEN
      BEGIN
         -- [리턴 메시지 삽입]        
          O_MSG := 'N : ' || 'EXCEPTION : OTHERS' || ' [M_DEBUG : '|| M_DEBUG ||']'; 
          
          -- [리턴 테이블]
          OPEN O_CURSOR FOR 
          SELECT '' AS "DATA_TABLE" 
            FROM DUAL;
      END;

      
/****************** [프로시저 종료 완료 부분] ******************/
END PRO_MANAGER_LOGIN;
/
/***********************************************************/
 

[결과 출력]

 

 
반응형
Comments