MySQL用户变量被覆盖

时间:2014-04-16 13:02:27

标签: mysql sql stored-procedures local-variables user-variables

我有一个存储过程,它调用类似于以下结构的用户函数:

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

希望有更好的解决方案。

0 个答案:

没有答案