【发布时间】:2014-05-20 17:40:20
【问题描述】:
我有一个带有一个参数的存储过程。通常,它会根据需要在单个 id 上调用。但有时,对 SELECT 的每个结果运行它会很有帮助。如何获取 SELECT 语句的结果并对每个结果运行存储过程?
【问题讨论】:
标签: mysql select stored-procedures
我有一个带有一个参数的存储过程。通常,它会根据需要在单个 id 上调用。但有时,对 SELECT 的每个结果运行它会很有帮助。如何获取 SELECT 语句的结果并对每个结果运行存储过程?
【问题讨论】:
标签: mysql select stored-procedures
这不是直接可能的,但是...
只要存储过程不返回结果集,您就可以编写一个存储函数,它接受所需的输入并使用与参数相同的值调用该过程。如果在 select 查询中使用了存储函数,则通常会为返回的每一行调用它,除非它在 where 子句中引用,在这种情况下,优化器可能会调用它以获得比您预期的更多的行,具体取决于查询计划。
或者您可以直接将逻辑移动到存储函数中,而不是使用过程。
【讨论】:
SELECT t1.foo, your_func(t1.bar) FROM table_name t1 WHERE ... 尝试类似SELECT t1.foo, your_func(t1.bar) FROM (SELECT foo, bar FROM table_name WHERE ...) t1 ...这将创建一个带有内部选择行的临时表,所以现在,神奇的是,t1 不再是基表的别名,它是匿名临时表的别名查询完成后立即自动销毁的表。