我有一个存储过程,它调用类似于以下结构的用户函数:
CREATE PROCEDURE `MyProc`()
BEGIN
SELECT MyFunc(Column1), @running := @running + Column2
FROM MyTable JOIN (@running := 0);
END
CREATE FUNCTION `MyFunc`(ID INT)
RETURNS INT
BEGIN
SELECT Column1, @running := @running + Column2
FROM OtherTable JOIN (@running := 0) WHERE MyTableID = ID;
RETURN -- some value calculated later
END
这里的问题是在调用函数时重置用户变量@running,这不是我想要的。理想情况下,它们具有完全不同的范围,并且希望使用局部变量,但我不知道是否可以在查询中增加局部变量,就像我上面所做的那样。
这样的事情可能吗?
CREATE PROCEDURE `MyProc`()
BEGIN
DECLARE running DECIMAL;
SET running = 0;
SELECT MyFunc(Column1), running = running + Column2
FROM MyTable;
END
CREATE FUNCTION `MyFunc`(ID INT)
RETURNS INT
BEGIN
DECLARE running DECIMAL;
SET running = 0;
SELECT Column1, running = running + Column2
FROM OtherTable WHERE MyTableID = ID;
RETURN -- some value calculated later
END
或者我是否必须手动跟踪数据库中的所有用户变量并确保它们的名称是唯一的?例如@ running1和@ running2
希望有更好的解决方案。