De @variable
syntaxis in MySQL geeft een door de gebruiker gedefinieerde sessievariabele aan. U kunt deze gebruikersvariabelen buiten een opgeslagen procedure instellen, maar u kunt ze ook binnen een opgeslagen procedure instellen, en het effect is dat de variabele de waarde behoudt nadat uw procedureaanroep is teruggekeerd.
Dus in jouw voorbeeld zou het volgende ook hetzelfde doen:
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;
Het is prima voor meerdere sessies om de gebruikersvariabele tegelijkertijd op deze manier in te stellen, omdat gebruikersvariabelen tot een enkele sessie worden beperkt en gelijktijdige sessies variabelen met dezelfde naam kunnen hebben, maar met verschillende waarden.
De variabele syntaxis zonder @ prefix is voor variabelen die lokaal zijn voor de procedure, ofwel procedureparameters, of anders lokale variabelen gedeclareerd met VERKLAREN binnen de procedure-instantie.
Dit gebruik dat je hebt, een gebruikersvariabele doorgeven als parameter en deze toewijzen in de hoofdtekst van de procedure, is handig als je een procedure meerdere keren wilt aanroepen en het resultaat in afzonderlijke gebruikersvariabelen wilt opslaan. Anders zou elke aanroep van de procedure de vorige waarde in de @empCount-gebruikersvariabele voor de huidige sessie overschrijven.