Komunikat o błędzie w tym przypadku mówi najważniejszą część:
To zachowanie jest zgodne z tym, co udokumentowano w podręczniku MySQL dotyczącym procedur i funkcji składowanych:
Przypisujesz wartości do swojego @Pn
zmienne używające instrukcji SELECT, które zwracają zestaw wyników, co jest niedozwolone w funkcji. Musisz usunąć te instrukcje z kodu. RETURN river
zwraca wynik wartość , ale nie zestaw wyników .
Obawiam się również, że używasz zmiennych sesji (zmiennych zdefiniowanych jako @nazwa_zmiennej), które są współdzielone przez połączenie, więc potencjalnie wielokrotne wywołanie tej samej funkcji w tym samym czasie w ramach połączenia może zakłócać się nawzajem.
Przechowywana funkcja powinna zwracać tylko pojedynczą wartość jako dane wyjściowe w return
oświadczenie. Wszystko inne jest uważane za efekt uboczny. Jeśli chcesz, aby Twój skrypt MySQL wypełniał wiele zmiennych, musisz użyć procedury składowanej, nie można użyć funkcji składowanej.