Mysql 如何从返回内容表的存储过程中获取数据

Mysql 如何从返回内容表的存储过程中获取数据,mysql,database,stored-procedures,plsql,plsqldeveloper,Mysql,Database,Stored Procedures,Plsql,Plsqldeveloper,我有一个存储过程,它返回任务列表及其详细信息。同样的程序,我想在其他地方使用,因为我也有一些小的变化类似的要求 但不同的是,我只想使用聚合函数获取一个列值(不是全部),以便从相同的过程中获取和(左时间) 由于这个过程是全局的,所以我不能为特定的需求更改它,另一方面,我也不想再次重新编写相同的代码 以下是我的过程及其输出的方式: 程序 DELIMITER $$ DROP PROCEDURE IF EXISTS PROC_Emp_task$$ CREATE PROCEDURE PROC_Emp_

我有一个存储过程,它返回任务列表及其详细信息。同样的程序,我想在其他地方使用,因为我也有一些小的变化类似的要求

但不同的是,我只想使用聚合函数获取一个列值(不是全部),以便从相同的过程中获取和(左时间)

由于这个过程是全局的,所以我不能为特定的需求更改它,另一方面,我也不想再次重新编写相同的代码

以下是我的过程及其输出的方式:

程序

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查询中调用过程。所以它不起作用


<如何>我们使用同样的程序来获得它?< /强>

您是否考虑接受另一个可以说要执行哪一个查询的参数?抱歉,但我不能。因为我不能更改过程的签名,因为它是全局的,并且实现了n个位置。实际上,该过程的实现也很复杂(它有太多的子查询、联接和动态筛选条件)。能否将参数设置为负值,作为运行哪个查询的指标?i、 e.1001运行当前查询-1001运行您的新查询?使用绝对值作为id?是的,我想我们可以这样做。我将努力实施。但是进一步说,如果有其他的解决方案是可能的,那么它将对我更有用。是什么阻止了你用新的需求编写另一个新的过程并调用它?
SELECT SUM(time_left) FROM (CALL PROC_Emp_task(101));