#mysql #stored-functions
#mysql #хранимые функции
Вопрос:
хранимая функция mysql: как выбрать несколько результатов и обработать их. Например,
create function hello() return decimal(10,2) determistic begin
select value1, value2 from Foo;
// process multiple rows in result set here
for (....) {
}
end
Комментарии:
Ответ №1:
https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html говорит:
Инструкции, возвращающие набор результатов, могут использоваться в хранимой процедуре, но не в хранимой функции.
Вы не можете работать select ... from Foo
в хранимой функции так, как вы бы выполняли хранимую процедуру, потому что это select
сгенерирует результирующий набор с несколькими столбцами и несколькими значениями.
Хранимая функция может возвращать только одно скалярное значение. В вашем примере вы возвращаете 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
Я не могу вдаваться в подробности, потому что вы не описали, что вы пытаетесь сделать со своей функцией, а приведенный вами пример не проясняет это.