@variable
синтаксисът в MySQL обозначава дефинирана от потребителя променлива на сесията. Можете да зададете тези потребителски променливи извън съхранена процедура, но можете също да ги зададете вътре в съхранена процедура и ефектът е, че променливата запазва стойността, след като извикването на вашата процедура се върне.
Така че във вашия пример, следното също би направило същото:
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;
Добре е няколко сесии да задават потребителската променлива по този начин едновременно, тъй като потребителските променливи са обхванати до една сесия, а едновременните сесии може да имат променливи с едно и също име, но с различни стойности.
Синтаксисът на променливите без префикс @ е за променливи, локални за процедурата, или параметри на процедурата, или локални променливи, декларирани с ДЕКЛАРИРАНЕ в тялото на процедурата.
Това използване, което имате, като предавате потребителска променлива като параметър и я присвоявате в тялото на процедурата, е полезно, ако искате да извикате процедура няколко пъти и да съхраните резултата в отделни потребителски променливи. В противен случай всяко извикване на процедурата ще презапише предишната стойност в потребителската променлива @empCount за текущата сесия.