Felmeddelandet i detta fall berättar den viktigaste delen:
Detta beteende överensstämmer med vad som finns dokumenterat i MySQL-manualen om lagrade procedurer och funktioner:
Du tilldelar värden till din @Pn
variabler som använder select-satser som returnerar en resultatuppsättning och detta är inte tillåtet i en funktion. Du måste ta bort dessa uttalanden från din kod. RETURN river
returnerar ett resultat värde , men inte en resultatuppsättning .
Jag är också orolig för att du använder sessionsvariabler (variabler definierade som @variabelnamn) som delas över en anslutning, så potentiellt flera anrop till samma funktion samtidigt inom en anslutning kan störa varandra.
En lagrad funktion är endast tänkt att returnera ett enda värde som dess utdata med return
påstående. Allt annat betraktas som en bieffekt. Om du vill att ditt MySQL-skript ska fylla i flera variabler, måste du använder en lagrad procedur kan du inte använda en lagrad funktion.