如何从另一个存储过程中的存储过程访问结果集?

ric*_*h p 8 mysql stored-procedures

我有一个重要的SELECT声明,我不想写两次(标准软件开发注意事项)。我想在两个存储过程中使用结果。我在想象这样的事情:

CREATE PROCEDURE consumerProcedureA()
BEGIN
    CALL supplierProcedure();
    -- ** insert magic here **
END;

CREATE PROCEDURE consumerProcedureB()
BEGIN
    CALL supplierProcedure();
    -- ** insert magic here **
END;

CREATE PROCEDURE supplierProcedure()
BEGIN
    SELECT field1, field2, field3, MESSYEXPR AS field4
    FROM (complicated sub-SQL query) -- blah blah blah
    ;
END;
Run Code Online (Sandbox Code Playgroud)

授予您,我可以创建一个视图来捕获公共查询,但是有没有办法让调用存储过程访问并处理被调用存储过程返回的结果集?

小智 3

我正在寻找一种自己执行此操作的方法(以一种令我满意的方式..),但 Stack Overflow 问答中描述了一种完全有效的方法:

在MySQL的存储过程中调用存储过程

AhamedMustafaM接受的答案演示了一种使用参数的技术OUT,代码如下:

    创建过程innerproc(OUT param1 INT)
    开始
     插入某个表;
     选择 LAST_INSERT_ID() 到 param1 中;
    结尾
    -----------------------------------
    创建过程outerproc()
    开始
    调用内部进程(@a);
    // @a 给出innerproc 的结果
    SELECT @a INTO 变量inouterproc FROM Dual;
    结尾

我确信并不总是您想要实现的目标的答案,但这肯定是一种选择。虽然您无法获得过程调用的直接OUT结果,但这将帮助您获得单独的值,可能使用多个参数来获得您需要的值。