【问题标题】:Sending results of a SELECT to stored procedure in MySQL将 SELECT 的结果发送到 MySQL 中的存储过程
【发布时间】:2014-05-20 17:40:20
【问题描述】:

我有一个带有一个参数的存储过程。通常,它会根据需要在单个 id 上调用。但有时,对 SELECT 的每个结果运行它会很有帮助。如何获取 SELECT 语句的结果并对每个结果运行存储过程?

【问题讨论】:

    标签: mysql select stored-procedures


    【解决方案1】:

    这不是直接可能的,但是...

    只要存储过程不返回结果集,您就可以编写一个存储函数,它接受所需的输入并使用与参数相同的值调用该过程。如果在 select 查询中使用了存储函数,则通常会为返回的每一行调用它,除非它在 ​​where 子句中引用,在这种情况下,优化器可能会调用它以获得比您预期的更多的行,具体取决于查询计划。

    或者您可以直接将逻辑移动到存储函数中,而不是使用过程。

    【讨论】:

    • 哦,这么近。我会将此标记为答案,但这并不完全有效。我需要修改用于 SELECT 的表中的数据,而 MySQL 不喜欢这样 - 不允许我使用函数来修改向函数提供数据的表。
    • 谢谢,但可能不会丢失。有一种方法可以通过将行具体化为匿名临时表来修改您从中选择的同一表中的行。而不是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 不再是基表的别名,它是匿名临时表的别名查询完成后立即自动销毁的表。
    猜你喜欢
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多