是否可以从mysql函数返回多个值?

ero*_*gol 6 mysql function return-value

我有三个表,我想总结每个表的所有结果列,并从我定义的函数返回这些值来执行所有过程.是否可以从单个mysql函数返回这三个浮点求和?

Hok*_*sai 6

我肮脏的解决方案是: 1. 连接字符串中的值。2 返回字符串。3 将返回的字符串拆分为值。我认为它不优雅,我确定这有局限性,但它适用于简单的情况

也有必要创建拆分功能,因为Mysql没有这个功能:

首先编辑您的函数。

CREATE FUNCTION yourFunctionWith2valuesForReturning()
BEGIN
     DECLARE var1 VARCHAR(255);
     DECLARE var2 VARCHAR(255);

    // Your function logic here. Assign values to var1 and var2

    RETURN CONCAT_WS('|', var1, var2);
END
Run Code Online (Sandbox Code Playgroud)

现在你可以调用这个函数来拆分你的返回值:

CREATE FUNCTION SPLIT_STR(x VARCHAR(510), delim VARCHAR(12), pos INT) RETURNS VARCHAR(255) DETERMINISTIC
BEGIN
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');
END
Run Code Online (Sandbox Code Playgroud)

为了获取值

SET value1 = SPLIT_STR(returnedVAlue, '|', 1);
SET value2 = SPLIT_STR(returnedVAlue, '|', 2);
Run Code Online (Sandbox Code Playgroud)

笔记:

您可以使用字符串作为分隔符,fe: '|sep|' 或其他你想要的。

SPLIT_STR 函数来自http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

关于在 mysql 中拆分字符串,另请参见这个问题:Split Varchar into Character in MySQL


E. *_*ger 6

正确的方法是使用存储过程:

CREATE PROCEDURE stored_proc(IN arg1 INT, IN arg2 INT, OUT retVal1 FLOAT, OUT retVal2 FLOAT, OUT retVal3 FLOAT)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用

SELECT x*y INTO retVal1;
...
Run Code Online (Sandbox Code Playgroud)

并使用@variables调用存储过程以访问它们:

CALL stored_proc(1, 2, @retVal1, @retVal2, @retVal3);
Run Code Online (Sandbox Code Playgroud)