투케이2K

53. (MYSQL/SQL) 프로시저 (PROCEDURE) - 특정 부서에 포함된 사용자 리스트 출력 - OUT 메시지 , SELECT 결과 반환 본문

MySqlDB

53. (MYSQL/SQL) 프로시저 (PROCEDURE) - 특정 부서에 포함된 사용자 리스트 출력 - OUT 메시지 , SELECT 결과 반환

투케이2K 2022. 6. 5. 18:10

[개발 환경 설정]

개발 툴 : Heidi

개발 언어 : Mysql

 

[소스 코드]

/**************************************************************/
-- [DELIMITER : 프로시저 앞,뒤의 위치하여 안에 있는 부분은  한번에 실행]
DELIMITER $$ 
/**************************************************************/
DROP PROCEDURE IF EXISTS PRO_SEL_TEST_USER; -- [이미 생성된 프로시저가 있으면 DROP]
CREATE PROCEDURE PRO_SEL_TEST_USER -- [프로시저 생성]
(
    IN I_DEPT_NAME  VARCHAR(100), -- [인풋 : 부서 이름]
    
    OUT O_MSG VARCHAR(500) -- [리턴 : 메시지]
)

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


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


[설 명] : 사용자 정보 조회 프로시저


[프로시저 호출] : 

CALL PRO_SEL_TEST_USER('백제', @O_MSG);
SELECT @O_MSG;


[프로시저 삭제] :

DROP PROCEDURE PRO_SEL_TEST_USER;


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

SHOW PROCEDURE STATUS;
 
***************************************************************/


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


    -- [전역 변수 선언]
    DECLARE M_DEBUG VARCHAR(100) DEFAULT '';
    
    
    
    
    
    -- [SQL 수행 EXCEPTION 처리]
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        -- [롤백 처리 실시]
        ROLLBACK;
        
        -- [리턴 데이터 삽입]
        SET O_MSG = CONCAT('N : EXCEPTION : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
        
    END;
    
    
    
    
    
    -- [1] : 인풋 데이터 널 체크 수행 실시    
    SET M_DEBUG = '1'; -- [디버깅 단계]
    
    IF I_DEPT_NAME IS NULL OR I_DEPT_NAME = '' OR LENGTH(I_DEPT_NAME) = 0 THEN
       
       -- [리턴 데이터 삽입]
       SET O_MSG = CONCAT('N : INPUT DATA IS NULL : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
       
       -- [프로시저 종료]
       LEAVE PROC_BODY;
       
    END IF;
    
    
    
    
    
    -- [2] : 부서에 포함된  사용자 정보 출력 실시
    SET M_DEBUG = '2'; -- [디버깅 단계]
    
    
    -- [SELECT 결과 반환]
    SELECT * 
        FROM TEST_USER
    WHERE TRIM(T_DEPT) = TRIM(I_DEPT_NAME)
    ;
    
    -- [리턴 데이터 삽입]
    SET O_MSG = CONCAT('Y : SUCCESS : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
    
	     
/**************************************************************/
END$$;
DELIMITER ;
/**************************************************************/
 

[결과 출력]

 

 

반응형
Comments