如何从MySQL中的过程返回准备好的查询结果

时间:2013-01-31 20:44:21

标签: mysql stored-procedures

我有一个用例,需要在存储过程中创建一个具有唯一名称的临时表。我发现使用动态表名执行查询的唯一方法是准备查询:

SET @d=CONCAT('SELECT * FROM table_', case); 
PREPARE q from @d;
EXECUTE q;

这很好用,但我无法弄清楚如何返回结果集。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您无需执行任何额外操作即可返回结果集。它足以执行准备好的查询。该查询执行的结果集将自动成为存储过程的结果集。

mysql> DELIMITER !!
mysql> CREATE PROCEDURE p()
    -> BEGIN
    ->  SET @sql := CONCAT('SELECT ', '123 as foo');
    ->  PREPARE q FROM @sql;
    ->  EXECUTE q;
    -> END!!
mysql> DELIMITER ;
mysql> CALL p;
+-----+
| foo |
+-----+
| 123 |
+-----+

重新评论:可能是这个错误:http://bugs.mysql.com/bug.php?id=20028已修复 您可以通过升级来纠正问题。

  

在5.0.30(不是5.0.29),5.1.13更改日志中注意到。

     

使用SQL_MODE = TRADITIONAL,MySQL在警告时错误地中止   在存储的例程和触发器中。

另见https://dba.stackexchange.com/questions/7499/function-returning-no-data-zero-rows-fetched-selected-or-processed-in-mysq