Имена переменных в процедурах mysql и select into

Сегодня почти весь день убил на отлавливание непонятного глюка в MySQL.
Суть глюка следующая. Допустим есть процедура которая считает прибыль по всем сделкам одного пользователя и записывает это в другую таблицу, например, в колонку пользователя.
Выглядит она следующим образом:

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `calcProfit`(userId bigint)
begin
	declare profit double;

	select sum(`profit`) 
	into profit 
	from `user_orders` 
	where `user_id` = userId;

	update `users` 
	set `total_profit` = profit 
	where `id` = userId;
end

Выполняя отдельно запрос

select sum(`profit`) 
from `user_orders` 
where `user_id` = userId;

Получаем, допустим, 456,12.
Но при вызове данной процедуры, она записывает нам 0.
Как говорил выше, времени я потратил много. А ошибка (ошибка ли??) оказалась банальной.

В процедурах нельзя делать select в переменные с именем идентичным имени колонки в таблице.
Если честно, в документации такого ограничения не нашел, или может плохо искал, но методом научного тыка пришел к этому решению.

Для того чтобы заработал наш предыдущий код, необходимо и достаточно всего лишь изменить имя переменной в которую выполняем select.
Рабочий вариант

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `calcProfit`(userId bigint)
begin
	declare totalProfit double;

	select sum(`profit`) 
	into totalProfit 
	from `user_orders` 
	where `user_id` = userId;

	update `users` 
	set `total_profit` = totalProfit 
	where `id` = userId;
end

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *