#mysql #stored-functions
#mysql #хранимые функции
Вопрос:
Попытка создать хранимую функцию в MYSQL определяет статус бюджета как превышение бюджета, под бюджетом или по бюджету. Вот моя встроенная функция:
Delimiter $
create function budgetCompare (hours dec(10,2), budget FLOAT(11,2), rate Float(7.2)) returns varchar(20)
deterministic
Begin
Declare status_ varchar(20);
CASE
when sum(hours * rate)/budget * 100 > 110 THEN Set status_ = "Over Budget";
when sum(hours * rate)/budget * 100 < 90 THEN SET status_ = "Under Budget";
else SET status_ = "On Budget";
END CASE;
RETURN (status_);
END $
Delimiter ;
Однако когда я пытаюсь использовать ошибку, я получаю сообщение об ошибке:
select p.projectNo, budgetCompare(hours, budget, rate)
from project as p
join projectteam using (projectNo)
join projectrole using (roleNo)
group by projectNo;
error: Error Code: 1111. Invalid use of group function
Я уже пробовал эту функцию раньше, и она работала. Функция будет создана, но не будет запущена.
Я продолжаю пытаться это исправить, но сейчас не вижу леса сквозь деревья.
Выполнение суммы (тариф * часы) / бюджета * 100 работает в обычном операторе select, но не с функцией.
Комментарии:
1. MySQL жалуется на сумму
when sum(......
. Что вы пытаетесь подвести? Если вы удалитеsum()
, это будет работать.2. Ваша функция является скалярной, а не агрегированной. Он не может быть использован таким образом. Из каких таблиц
hours, budget, rate
взяты?