Mysql
 sql >> Database >  >> RDS >> Mysql

Simbolo @ nella procedura memorizzata?

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.