Mysql
 sql >> Datenbank >  >> RDS >> Mysql

@-Symbol in gespeicherter Prozedur?

Die @variable Syntax in MySQL bezeichnet eine benutzerdefinierte Sitzungsvariable. Sie können diese Benutzervariablen außerhalb einer gespeicherten Prozedur festlegen, aber Sie können sie auch innerhalb einer gespeicherten Prozedur festlegen, und der Effekt ist, dass die Variable den Wert behält, nachdem Ihr Prozeduraufruf zurückgegeben wird.

In Ihrem Beispiel würde also Folgendes dasselbe tun:

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;

Es ist in Ordnung, wenn mehrere Sitzungen die Benutzervariable gleichzeitig auf diese Weise festlegen, da Benutzervariablen auf eine einzelne Sitzung beschränkt sind und gleichzeitige Sitzungen Variablen mit demselben Namen, aber unterschiedlichen Werten haben können.

Die Variablensyntax ohne @-Präfix gilt für Prozedur-lokale Variablen, entweder Prozedurparameter oder lokale Variablen, die mit ERKLÄREN innerhalb des Verfahrenshauptteils.

Diese Verwendung, die Sie haben, eine Benutzervariable als Parameter zu übergeben und im Hauptteil der Prozedur zuzuweisen, ist nützlich, wenn Sie eine Prozedur mehrmals aufrufen und das Ergebnis in separaten Benutzervariablen speichern möchten. Andernfalls würde jeder Aufruf der Prozedur den vorherigen Wert in der Benutzervariable @empCount für die aktuelle Sitzung überschreiben.