我有一个存储过程,它返回任务列表及其详细信息。我希望在其他地方使用相同的程序,因为我也有类似的要求和一些小的改变。
但不同的是我只想用聚合函数获取一个列值(不是全部),例如。从同一程序获得 sum(time_left) 。
因为该程序是全局程序,所以我不能为特定要求更改它,另一方面我也不想再次重写相同的代码。
以下是我的程序及其输出的样子:
程序
DELIMITER $$
DROP PROCEDURE IF EXISTS PROC_Emp_task$$
CREATE PROCEDURE PROC_Emp_task(IN IN_assigned_to_id BIGINT)
BEGIN
SELECT
Emp_task.task_id,
Emp_task.name,
Emp_userstory_task.userstory_id,
Emp_task.estimated_end_date,
(Emp_task.alloted_hour- Emp_task.actual_hour) AS time_left,
APV_Priority.name AS priority,
Emp_phase_lookup.title AS lifecyce_phase,
APV_Status.name AS status_name,
Emp_task.estimated_start_date
FROM
Emp_task
INNER JOIN Emp_userstory_task ON (Emp_task.task_id = Emp_userstory_task.task_id)
INNER JOIN ApplicationParamValue AS APV_Priority ON (Emp_task.priority_id=APV_Priority.appParamValueId)
INNER JOIN Emp_lifecycle_phase ON (Emp_task.lifecycle_phase_id = Emp_lifecycle_phase.lifecycle_phase_id)
INNER JOIN Emp_phase_lookup ON (Emp_phase_lookup.phase_id = Emp_lifecycle_phase.phase_id)
INNER JOIN ApplicationParamValue AS APV_Status ON (Emp_task.status_id=APV_Status.appParamValueId)
WHERE
Emp_task.assigned_to_id=IN_assigned_to_id
AND Emp_task.status_id <> (SELECT appParamValueId FROM ApplicationParamValue WHERE ApplicationParamValue.name='Completed'
AND appParamGroupId=(SELECT appParamGroupId FROM ApplicationParamGroup WHERE ApplicationParamGroup.groupName='progress_status'))
AND Emp_task.isActive=1
ORDER BY estimated_end_date ASC,time_left ASC,priority ASC;
END$$
DELIMITER ;
我正在考虑应用一些简单的解决方案,而不是,如下所示:
SELECT SUM(time_left) FROM (CALL PROC_Emp_task(101));
但是因为我们无法在select查询中调用过程。所以它没有奏效。
那么我们如何重复使用相同的程序呢?