https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html говорит:
Операторы, которые возвращают набор результатов, могут использоваться внутри хранимой процедуры, но не внутри хранимой функции.
Вы не можете запустить select ... from Foo
в хранимой функции, как в хранимой процедуре, потому что select
сгенерирует результирующий набор с несколькими столбцами и несколькими значениями.
A сохраненоФункция может возвращать только одно скалярное значение.В вашем примере вы возвращаете decimal(10,2)
.Поэтому, что бы вы ни делали со своими запросами, результат должен заканчиваться выражением в RETURN-выражении .
Если вам нужно выполнить запрос select
, вы можете сохранить результат в переменной и затем вернуть эту переменную.
...
begin
declare d decimal(10,2);
select <expr> into d from Foo limit 1;
return d;
end
Или вы можете запустить курсор (как предложеноссылка, размещенная @stickybit выше в комментарии), и обрабатывает результат запроса построчно.Посмотрите пример на этой странице документации: https://dev.mysql.com/doc/refman/8.0/en/cursors.html
Я не могу вдаваться в подробности, потому что вы не описали, что вы пытаетесь сделать со своей функцией, а показанный вами пример не даетэто ясно.