хранимая функция mysql: как выбрать несколько результатов и обработать их - PullRequest
0 голосов
/ 04 апреля 2019

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

0 голосов
/ 05 апреля 2019

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

Я не могу вдаваться в подробности, потому что вы не описали, что вы пытаетесь сделать со своей функцией, а показанный вами пример не даетэто ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...