La @variable
syntaxe dans MySQL désigne une variable de session définie par l'utilisateur. Vous pouvez définir ces variables utilisateur en dehors d'une procédure stockée, mais vous pouvez également les définir à l'intérieur d'une procédure stockée, et l'effet est que la variable conserve la valeur après le retour de votre appel de procédure.
Ainsi, dans votre exemple, ce qui suit ferait également la même chose :
CREATE PROCEDURE emp_count_2()
BEGIN
SELECT COUNT(*) INTO @empCount FROM Employee;
END
CALL emp_count_2(); /* sets @empCount as a side-effect */
SELECT @empCount;
Il est acceptable que plusieurs sessions définissent simultanément la variable utilisateur de cette manière, car les variables utilisateur sont limitées à une seule session, et les sessions simultanées peuvent avoir des variables du même nom, mais avec des valeurs différentes.
La syntaxe des variables sans préfixe @ concerne les variables locales à la procédure, soit les paramètres de la procédure, soit les variables locales déclarées avec DECLARER au sein du corps de la procédure.
Cette utilisation que vous avez, en passant une variable utilisateur en tant que paramètre et en l'affectant dans le corps de la procédure, est utile si vous souhaitez appeler une procédure plusieurs fois et stocker le résultat dans des variables utilisateur distinctes. Sinon, chaque appel à la procédure écraserait la valeur précédente dans la variable utilisateur @empCount pour la session en cours.