Notice
Recent Posts
Recent Comments
Link
투케이2K
51. (MYSQL/SQL) 프로시저 (PROCEDURE) - 특정 부서 데이터 삽입 수행 본문
[개발 환경 설정]
개발 툴 : Heidi
개발 언어 : Mysql
[소스 코드]
/**************************************************************/
-- [DELIMITER : 프로시저 앞,뒤의 위치하여 안에 있는 부분은 한번에 실행]
DELIMITER $$
/**************************************************************/
DROP PROCEDURE IF EXISTS PRO_INS_DEPT; -- [이미 생성된 프로시저가 있으면 DROP]
CREATE PROCEDURE PRO_INS_DEPT -- [프로시저 생성]
(
IN I_DEPT_NAME VARCHAR(100), -- [인풋 : 부서 이름]
IN I_DEPT_PHONE VARCHAR(100), -- [인풋 : 부서 연락처]
IN I_DEPT_PLACE VARCHAR(100), -- [인풋 : 부서 위치]
OUT O_MSG VARCHAR(500) -- [리턴 : 메시지]
)
/**************************************************************/
/***************************************************************
[프로시저 설명]
[설 명] : 부서 정보 삽입 프로시저
[프로시저 호출] :
CALL PRO_INS_DEPT('고조선', '070-123-5555', 'P-A', @O_MSG);
SELECT @O_MSG;
[프로시저 삭제] :
DROP PROCEDURE PRO_INS_DEPT;
[프로시저 생성 목록 확인] :
SHOW PROCEDURE STATUS;
***************************************************************/
/**************************************************************/
PROC_BODY : BEGIN
/**************************************************************/
-- [전역 변수 선언]
DECLARE M_DEBUG VARCHAR(100) DEFAULT '';
DECLARE M_COUNT INTEGER DEFAULT 0;
DECLARE M_MAX_IDX INTEGER DEFAULT 0;
-- [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
OR I_DEPT_PHONE IS NULL OR I_DEPT_PHONE = '' OR LENGTH(I_DEPT_PHONE) = 0
OR I_DEPT_PLACE IS NULL OR I_DEPT_PLACE = '' OR LENGTH(I_DEPT_PLACE) = 0 THEN
-- [리턴 데이터 삽입]
SET O_MSG = CONCAT('N : INPUT DATA IS NULL : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
-- [프로시저 종료]
LEAVE PROC_BODY;
END IF;
-- [SQL 트랜잭션 처리 실시]
START TRANSACTION;
-- [2] : 이미 부서 정보가 포함되어있는지 확인
SET M_DEBUG = '2'; -- [디버깅 단계]
SET M_COUNT = (
SELECT COUNT(*)
FROM TEST_DEPT
WHERE TRIM(T_DEPT_NAME) = TRIM(I_DEPT_NAME)
);
IF M_COUNT > 0 THEN
-- [리턴 데이터 삽입]
SET O_MSG = CONCAT('N : DATA IS ALREADY : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
-- [프로시저 종료]
LEAVE PROC_BODY;
END IF;
-- [3] : 부서 인덱스 번호 최대값 확인 실시
SET M_DEBUG = '3'; -- [디버깅 단계]
SET M_MAX_IDX = (
SELECT MAX(CAST(T_DEPT_IDX AS SIGNED))
FROM TEST_DEPT
);
SET M_MAX_IDX = M_MAX_IDX + 1;
-- [4] : INSERT 데이터 삽입 수행 실시
SET M_DEBUG = '4'; -- [디버깅 단계]
INSERT INTO TEST_DEPT VALUES (CAST(M_MAX_IDX AS CHAR), I_DEPT_NAME, I_DEPT_PHONE, I_DEPT_PLACE);
-- [5] : [리턴 데이터 삽입]
SET M_DEBUG = '5'; -- [디버깅 단계]
SET O_MSG = CONCAT('Y : SUCCESS : M_DEGUB : [', CAST(M_DEBUG AS CHAR), ']');
-- [SQL COMMIT 처리 실시]
COMMIT;
/**************************************************************/
END$$;
DELIMITER ;
/**************************************************************/
[결과 출력]
반응형
'MySqlDB' 카테고리의 다른 글
53. (MYSQL/SQL) 프로시저 (PROCEDURE) - 특정 부서에 포함된 사용자 리스트 출력 - OUT 메시지 , SELECT 결과 반환 (0) | 2022.06.05 |
---|---|
52. (MYSQL/SQL) 함수 (FUNCTION) - 사용자 정보 포맷 수행 (0) | 2022.06.05 |
50. (MYSQL/SQL) SUBSTRING_INDEX 사용해 특정 문자 값 위치 기준 자르기 수행 (0) | 2022.05.30 |
49. (MYSQL/SQL) CONCAT_WS 사용해 특정 문자 기호를 각 문자열에 결합 실시 (0) | 2022.05.30 |
48. (MYSQL/SQL) IF 사용해 조건문이 참 (TRUE) , 거짓 (FALSE) 판단 실시 (0) | 2022.05.30 |
Comments