当前位置: 首页 > 面试题库 >

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

伍皓
2023-03-14
问题内容

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

如何调用存储的MYSQL函数/过程并将其输出用于进一步的SELECT查询?

尽管这显然行不通,但这是我想要的东西:

SELECT P.`id` FROM (CALL test_proc()) AS P

其中test_proc()由以下方式定义:

DROP PROCEDURE IF EXISTS test_proc;
DELIMITER ;;
CREATE PROCEDURE test_proc()
BEGIN
    SELECT * FROM `table`;
END;;
DELIMITER ;

举个例子。我也可以使用存储函数。


问题答案:

无法直接完成此操作,因为存储过程中无限制选择的输出是发送给客户端的结果集,但从技术上讲不是表。

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

将此添加到过程中:

DROP TEMPORARY TABLE IF EXISTS foo;
CREATE TEMPORARY TABLE foo SELECT ... your existing select query here ...;

过程完成后,SELECT * FROM foo;将为您提供从proc中获得的收益。您几乎可以像任何桌子一样加入它。

完成后,放下它,否则当断开连接时它会自行消失。如果再次运行该proc,它将被删除并重新创建。



 类似资料:
  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 问题内容: 我有一个来自此(google book )的mysql存储过程,一个例子是这样的: 该程序编译正常。(我在ubuntu中使用MySQL查询浏览器)。 但是,当我调用该过程时: (也在查询浏览器中) 它返回一个错误: 为什么这个例子不起作用? 问题答案: 无法复制。对我来说效果很好: 也许您应该粘贴整个错误消息,而不是对其进行汇总。

  • 问题内容: 如何在MySQL存储过程中构建和使用动态SQL? 问题答案: 我不相信MySQL支持动态sql。您可以执行类似但不同的“准备”语句。 这是一个例子: 准备好的语句通常用于查看给定查询的执行计划。由于它们是使用 execute 命令执行的,并且可以将 sql 分配给变量,因此您可以近似地估计一些与动态sql相同的行为。 这是一个很好的链接: 不要忘记使用最后一行取消分配! 祝好运!

  • 问题内容: 我并不是说要进行“ SET NOCOUNT OFF”。但是我有一个存储过程,可用于将一些数据插入某些表中。此过程创建一个xml响应字符串,下面让我举一个例子: 因此,我整理了一个脚本,该脚本多次使用此SP,并且xml“输出”变得太多了(它已经使我的盒子崩溃了)。 有没有办法抑制或重定向由此存储过程生成的输出?我不认为修改此存储过程是一种选择。 谢谢。 我想我应该澄清一下。上面的SP被我

  • 问题内容: 我有一个MYSQL存储过程SP1(),它返回一个结果集。 我想在SP2()内部调用SP1()并遍历SP1()的结果集以执行一些其他工作。 我不想从SP1()中包含我的逻辑,因为这会使SP2()过于复杂。 有什么建议么? 谢谢。 问题答案: 您想做的事情听起来并不是特别好,也许您应该考虑重新设计这两个过程。但是,您可以执行以下操作来快速解决此问题: 使您的sp2 sproc将其中间结果写

  • 问题内容: 我对MySQL相当陌生,但是有MS SQL经验。 是否可以在 存储过程* 外部 声明变量 并使用 while 语句? * 我只发现了这样的例子 建议我正确的方法 问题答案: 不,你做不到。您只能在BEGIN … END子句中使用这些语句。 因此,可以在存储过程/功能,触发器和事件中使用。 此处提供更多信息-MySQL复合语句语法。