繁体   English   中英

在select语句中使用存储过程的结果[MySql]

[英]Use results of a stored procedure in a select statement [MySql]

我有一个存储过程,它返回几个值(1行)。 我需要在select查询中使用该存储过程的结果。

下面是我希望它的伪代码(这样的语法不存在,但让我们假设它允许将我的存储过程返回的3个值保存到C,D和E中):

SELECT
  t1.A, t1.B,
  MyStoredProc(t1.A) AS (C, D, E)
FROM
  t1
ORDER BY
  D
LIMIT
  1

(在客户端我需要获得A,B,C,D和E)

我可以将存储过程重写为存储函数,该函数将值作为带有分隔符的连接字符串返回并解析查询中的值,但我想找到一个更清晰的解决方案。

您无法从另一个查询中的存储过程返回的结果集中访问这些值。 它们只发送给客户。 结果集看起来像一个表,但它不是表。

但是,有一个解决方法,如下所述:

如何使用存储的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

如果对任何给定函数使用唯一变量名,则这些名称不会发生冲突。 即使对于返回多行的语句的同一行上的数据,函数也是串行执行的,而不是并行执行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM