【发布时间】:2010-12-20 21:03:55
【问题描述】:
我有一个复杂的SELECT 查询,它会根据时间范围进行过滤,并且我希望可以使用用户提供的参数来指定这个时间范围(开始日期和结束日期)。所以我可以使用一个存储过程来做这件事,返回的是一个多行的结果集。我遇到的问题是之后如何处理这个结果集。我不能这样做:
SELECT * FROM (CALL stored_procedure(start_time, end_time))
即使存储过程只是一个带参数的SELECT。服务器端准备好的语句也不起作用(它们也不是持久的)。
有人建议使用临时表;这不是一个理想的解决方案的原因是 1)我不想指定表模式,似乎你必须这样做,以及 2)临时表的生命周期将仅限于查询的调用,它不需要再坚持下去了。
所以回顾一下,我想要一个持久的预处理语句服务器端,它的返回是一个结果集,MySQL 可以像处理子查询一样操作它。有任何想法吗?谢谢。
顺便说一句,我使用的是 MySQL 5.0。我知道这是一个相当旧的版本,但这个功能似乎在任何更新的版本中都不存在。我不确定在其他 SQL 引擎中是否可以从存储过程中进行选择;切换目前不是一种选择,但我想知道是否有可能,以防我们将来决定切换。
【问题讨论】:
-
既然不可能像你想要的那样将存储过程调用为子查询,那么你的情况可以使用视图吗?
-
视图不起作用的原因是因为我希望子查询接受参数,而视图需要设置整个查询。
标签: mysql stored-procedures prepared-statement temp-tables