@variable
syntaxe v MySQL označuje uživatelem definovanou proměnnou relace. Tyto uživatelské proměnné můžete nastavit mimo uloženou proceduru, ale můžete je také nastavit uvnitř uložené procedury a výsledkem je, že proměnná si zachová hodnotu i po návratu volání procedury.
Takže ve vašem příkladu by totéž udělalo i následující:
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;
Je v pořádku, když uživatelskou proměnnou nastavuje tímto způsobem více relací současně, protože uživatelské proměnné se vztahují na jednu relaci a souběžné relace mohou mít proměnné stejného názvu, ale s různými hodnotami.
Syntaxe proměnné bez předpony @ je pro proměnné lokální v proceduře, buď parametry procedury, nebo jinak lokální proměnné deklarované pomocí PROHLÁŠIT v těle procedury.
Toto použití, které máte, předávání uživatelské proměnné jako parametru a její přiřazení v těle procedury, je užitečné, pokud chcete proceduru volat několikrát a uložit výsledek do samostatných uživatelských proměnných. Jinak by každé volání procedury přepsalo předchozí hodnotu v uživatelské proměnné @empCount pro aktuální relaci.