@variable
składnia w MySQL oznacza zmienną sesji zdefiniowaną przez użytkownika. Te zmienne użytkownika można ustawić poza procedurą składowaną, ale można je również ustawić wewnątrz procedury składowanej, a efektem jest to, że zmienna zachowuje wartość po zwróceniu wywołania procedury.
Tak więc w twoim przykładzie następujące działania również zrobiłyby to samo:
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;
W przypadku wielu sesji ustawienie zmiennej użytkownika w ten sposób jest w porządku, ponieważ zakres zmiennych użytkownika obejmuje pojedynczą sesję, a współbieżne sesje mogą mieć zmienne o tej samej nazwie, ale o różnych wartościach.
Składnia zmiennej bez prefiksu @ dotyczy zmiennych lokalnych dla procedury, parametrów procedury lub zmiennych lokalnych zadeklarowanych za pomocą ZADEKLARUJ w ramach organu procedury.
To użycie, przekazując zmienną użytkownika jako parametr i przypisując ją w ciele procedury, jest przydatne, jeśli chcesz wywołać procedurę kilka razy i zapisać wynik w oddzielnych zmiennych użytkownika. W przeciwnym razie każde wywołanie procedury nadpisze poprzednią wartość w zmiennej użytkownika @empCount dla bieżącej sesji.