0

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

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

希望有更好的解决方案。

4

0 回答 0