DELIMITER $$ SET @saved_sql_mode = @@sql_mode $$ SET @@sql_mode = 'NO_AUTO_VALUE_ON_ZERO' $$ CREATE PROCEDURE `sp_add_group`( IN p_admin_user_id INT, IN p_actor_description VARCHAR(100), IN p_group_name VARCHAR(100), IN p_manager_user_id BIGINT, -- 파라미터명 변경됨 OUT p_new_group_id BIGINT, OUT p_result_message VARCHAR(255) ) COMMENT '그룹(부서) 추가 및 로그 기록' BEGIN DECLARE v_existing_group_id BIGINT DEFAULT NULL; DECLARE v_now DATETIME DEFAULT NOW(); DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT; ROLLBACK; SET p_new_group_id = NULL; SET p_result_message = CONCAT('DB 오류 (', @errno, '): ', @text); END; -- 입력값 검증 IF p_admin_user_id IS NULL AND p_actor_description IS NULL THEN SET p_new_group_id = NULL; SET p_result_message = '작업 주체 정보는 필수입니다.'; ELSEIF p_group_name IS NULL OR p_group_name = '' THEN SET p_new_group_id = NULL; SET p_result_message = '그룹(부서) 이름은 필수입니다.'; ELSE -- 그룹 이름 중복 검사 SELECT group_id INTO v_existing_group_id FROM group_info WHERE LOWER(group_name) = LOWER(p_group_name) LIMIT 1; IF v_existing_group_id IS NOT NULL THEN SET p_new_group_id = NULL; SET p_result_message = CONCAT('이미 사용 중인 그룹(부서) 이름입니다: ', p_group_name); ELSE -- 모든 검증 통과, 트랜잭션 시작 START TRANSACTION; INSERT INTO group_info (group_name, manager_user_id) -- 컬럼명 변경됨 VALUES (p_group_name, p_manager_user_id); -- 파라미터명 변경됨 SET p_new_group_id = LAST_INSERT_ID(); INSERT INTO log_add_group (log_date, admin_user_id, actor_description, group_id, group_name, manager_user_id) -- 컬럼명 변경됨 VALUES (v_now, p_admin_user_id, p_actor_description, p_new_group_id, p_group_name, p_manager_user_id); -- 파라미터명 변경됨 COMMIT; SET p_result_message = CONCAT('그룹(부서) "', p_group_name, '" (ID: ', p_new_group_id, ') 추가 완료.'); END IF; -- 그룹 이름 중복 IF 종료 END IF; -- 입력값 검증 IF 종료 END $$ DELIMITER ;