Переменная пользователя MySQL перезаписывается

У меня есть хранимая процедура, которая вызывает пользовательскую функцию, похожую на структуру ниже:

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 ответов

Другие вопросы по тегам