gpt4 book ai didi

mysql - 从存储过程中选择数据

转载 作者:行者123 更新时间:2023-11-29 03:13:26 24 4
gpt4 key购买 nike

我有一个复杂的 SELECT 查询,它在一个时间范围内进行过滤,我希望这个时间范围(开始和结束日期)可以使用用户提供的参数来指定。所以我可以用一个存储过程来做这件事,返回的是一个多行的结果集。我遇到的问题是之后如何处理这个结果集。我不能做这样的事情:

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

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

总而言之,我想要一个类似于服务器端持久准备语句的东西,它的返回结果集是 MySQL 可以像处理子查询一样操作的结果集。有任何想法吗?谢谢。

顺便说一下,我使用的是 MySQL 5.0。我知道这是一个很旧的版本,但这个功能似乎在任何更新的版本中都不存在。我不确定在其他 SQL 引擎中是否可以从存储过程中进行选择;目前无法进行切换,但我想知道是否有可能,以防我们将来决定切换。

最佳答案

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

select * from table(FunctionToBeCalls(parameters));

唯一的缺点是这个结果集没有索引,所以如果在复杂查询中使用该函数,它可能会很慢。

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

关于mysql - 从存储过程中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com