La @variable
la sintassi in MySQL denota una variabile di sessione definita dall'utente. È possibile impostare queste variabili utente al di fuori di una stored procedure, ma è anche possibile impostarle all'interno di una stored procedure e l'effetto è che la variabile mantiene il valore dopo il ritorno della chiamata alla procedura.
Quindi nel tuo esempio, anche quanto segue farebbe la stessa cosa:
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;
Va bene che più sessioni impostino la variabile utente in questo modo contemporaneamente, perché le variabili utente hanno lo scopo di una singola sessione e le sessioni simultanee possono avere variabili con lo stesso nome, ma con valori diversi.
La sintassi della variabile senza prefisso @ è per variabili locali alla procedura, parametri della procedura o variabili locali dichiarate con DICHIARA all'interno del corpo della procedura.
Questo utilizzo che hai, passando una variabile utente come parametro e assegnandola nel corpo della procedura, è utile se vuoi chiamare una procedura più volte e memorizzare il risultato in variabili utente separate. Altrimenti ogni chiamata alla procedura sovrascriverebbe il valore precedente nella variabile utente @empCount per la sessione corrente.