create
definer = root@`%` function FnGetProjectStatusCountByDepartment(p_COMPANY_UID varchar(50), p_DEPT_CODE varchar(50),
p_PROJ_STATUS varchar(50),
p_PROJECT_YEAR varchar(50)) returns int
BEGIN
DECLARE v_RETURN_RESULT INT;
SET v_RETURN_RESULT=0;
#저장 프로시저 호출하여 결과를 임시 테이블에 삽입
WITH RECURSIVE HIERARCHY_DATA AS
(
SELECT
DEPT_CODE,
DEPT_PARENT_CODE,
DEPT_NAME
FROM department
WHERE COMPANY_UID=p_COMPANY_UID AND DEPT_CODE=p_DEPT_CODE
UNION ALL
SELECT
DE.DEPT_CODE,
DE.DEPT_PARENT_CODE,
DE.DEPT_NAME
FROM department DE
JOIN HIERARCHY_DATA AS HD
ON DE.DEPT_PARENT_CODE = HD.DEPT_CODE
)
SELECT
IFNULL(SUM(CASE FnGetProjectTaskIndicatorByGantt(MT.TASK_PCT_COMP, MT.TASK_START_DATE, MT.TASK_FINISH_DATE)
WHEN p_PROJ_STATUS THEN 1 ELSE 0 END), 0) INTO v_RETURN_RESULT
FROM project MP
JOIN project_task AS MT
ON MP.PROJ_UID = MT.PROJ_UID AND MT.TASK_ID = 0 AND MT.TASK_UID=MT.PROJ_UID
WHERE MP.COMPANY_UID=p_COMPANY_UID AND MP.PROJ_TYPE='PROJECT' AND
MP.DEPT_CODE IN (SELECT DEPT_CODE FROM HIERARCHY_DATA) AND
(
p_PROJECT_YEAR='' OR
(p_PROJECT_YEAR BETWEEN YEAR( MT.TASK_START_DATE) AND YEAR( MT.TASK_FINISH_DATE))
);
#리턴 밸류
RETURN v_RETURN_RESULT;
End;
Blog
Mysql, MariaDB WITH RECURSIVE 구문을 함수에서 사용하는 방법
2024-07-23