您无法访问另一个查询中存储过程返回的结果集中的值。它们仅发送给客户端。结果集看起来像一个表,但它不是一个表。
但是,有一种解决方法,如下所述:
如何使用存储的 MYSQL 过程中的表输出
它不能让你准确地到达你需要去的地方,但它会让你尽可能接近。
否则,您可以编写三个存储的函数,它们都运行完全相同的逻辑位,但是它们将它们的结果缓存在会话变量中,因此无论哪个函数首先执行都会为另外两个设置事情,因此它们复杂的逻辑只对给定的输入值执行一次然后重新执行下一个输入值,因为它与缓存的不同。
IF NOT @__cached__function_input <=> input_arg THEN
SET @__cached__function_input = input_arg;
SELECT complicated, logic, things INTO @__cached__a, @__cached__b, @__cached__c;
END IF;
RETURN @__cached__a; # in function "a" -- return b in b and c in c
如果您对任何给定的函数使用唯一的变量名,它们就不会发生冲突。函数是串行执行的,而不是并行执行的,即使对于返回多行的语句的同一行上的数据也是如此。