A mensagem de erro neste caso informa a parte mais importante:
Esse comportamento é consistente com o que está documentado no manual do MySQL sobre procedimentos e funções armazenados:
Você atribui valores ao seu
@Pn
variáveis usando instruções select que retornam um conjunto de resultados e isso não é permitido em uma função. Você precisa remover essas instruções do seu código. RETURN river
retorna um resultado valor , mas não um resultado definido . Também estou preocupado que você use variáveis de sessão (variáveis definidas como @variable_name) que são compartilhadas em uma conexão, portanto, potencialmente, várias chamadas para a mesma função ao mesmo tempo em uma conexão podem interferir umas nas outras.
Uma função armazenada deve retornar apenas um único valor como sua saída com o
return
declaração. Qualquer outra coisa é considerada um efeito colateral. Se você quiser que seu script MySQL preencha várias variáveis, você deve usar um procedimento armazenado, você não pode usar uma função armazenada.