@variable
MySQLの構文は、ユーザー定義のセッション変数を示します。これらのユーザー変数はストアドプロシージャの外部で設定できますが、ストアドプロシージャの内部で設定することもできます。その結果、プロシージャの呼び出しが戻った後も変数は値を保持します。
したがって、あなたの例では、以下も同じことをします:
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;
ユーザー変数のスコープは単一のセッションであり、同時セッションには同じ名前で値が異なる変数が含まれる可能性があるため、複数のセッションでこの方法でユーザー変数を同時に設定しても問題ありません。
@プレフィックスのない変数構文は、プロシージャにローカルな変数、プロシージャパラメータ、または宣言 手順本体内。
ユーザー変数をパラメーターとして渡し、それをプロシージャの本体に割り当てるというこの使用法は、プロシージャを複数回呼び出して結果を個別のユーザー変数に格納する場合に役立ちます。そうしないと、プロシージャを呼び出すたびに、現在のセッションの@empCountユーザー変数の以前の値が上書きされます。