如何使用存储的MYSQL过程中的表输出

Joh*_*nes 17 mysql select stored-procedures stored-functions

我一直在寻找最后一小时左右,并没有找到这个看似简单的问题的确定答案:

如何调用存储的MYSQL函数/过程并在其他SELECT查询中使用其输出?


虽然这显然不起作用,但这是我想要的东西:

SELECT P.`id` FROM (CALL test_proc()) AS P
Run Code Online (Sandbox Code Playgroud)

其中test_proc()的定义如下:

DROP PROCEDURE IF EXISTS test_proc;
DELIMITER ;;
CREATE PROCEDURE test_proc()
BEGIN
    SELECT * FROM `table`;
END;;
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

仅作为一个例子.我也可以使用存储函数.

Mic*_*bot 20

这不能直接完成,因为存储过程中无界选择的输出是发送到客户端的结果集,但技术上不是表.

解决方法是让proc在为您创建表后将数据放入临时表中.此过程完成后,此表仅适用于您的连接.如果其他人同时运行proc并且任何其他连接都不可见,则不会导致冲突.

将此添加到过程:

DROP TEMPORARY TABLE IF EXISTS foo;
CREATE TEMPORARY TABLE foo SELECT ... your existing select query here ...;
Run Code Online (Sandbox Code Playgroud)

当你的程序结束时,SELECT * FROM foo;会给你你从proc得到的东西.您可以像任何桌子一样加入它.

当你完成后,丢弃它,或者当你断开连接时它会自行消失.如果再次运行proc,它将被删除并重新创建.