从存储过程中选择数据

时间:2010-12-20 21:03:55

标签: mysql stored-procedures prepared-statement temp-tables

我有一个复杂的SELECT查询过滤时间范围,我希望使用用户提供的参数指定此时间范围(开始日期和结束日期)。所以我可以使用存储过程来执行此操作,并且返回是多行结果集。我遇到的问题是如何处理此结果集。我做不了类似的事情:

SELECT * FROM (CALL stored_procedure(start_time, end_time))

即使存储过程只是一个带有参数的SELECT。服务器端预处理语句也不起作用(并且它们也不是持久的)。 有人建议使用临时表;这不是一个理想的解决方案的原因是1)我不想指定表模式,似乎你必须,2)临时表的生命周期仅限于查询的调用,它不需要坚持下去。

所以回顾一下,我想要一个类似持久性预处理语句服务器端的东西,它的返回值是MySQL可以操作的结果集,好像它是一个子查询。有任何想法吗?感谢。

顺便说一下,我正在使用MySQL 5.0。我知道这是一个非常古老的版本,但这个功能似乎不存在于任何更新版本中。我不确定在其他SQL引擎中是否可以从存储过程中进行SELECT;切换目前不是一种选择,但我想知道是否有可能,以防我们决定在未来转换。

1 个答案:

答案 0 :(得分:1)

在其他引擎中可以从功能中进行选择。例如,Oracle允许您编写一个返回用户定义类型表的函数。您可以在函数中定义结果集,使用查询或甚至使用选择和代码的组合来填充它们。最终,可以从函数返回结果集,您可以使用以下命令继续查询:

select * from table(FunctionToBeCalls(parameters));

唯一的缺点是,此结果集未编入索引,因此如果在复杂查询中使用该函数,它可能会很慢。

在MySQL中,这样的事情是可能的。无法在选择查询中直接使用过程的结果集。您可以从函数返回单个值,并且可以使用OUTINOUT参数来返回值。 但是整个结果集是不可能的。在您的程序中填写临时表是最接近的。