Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

@ símbolo no procedimento armazenado?


A @variable sintaxe no MySQL denota uma variável de sessão definida pelo usuário. Você pode definir essas variáveis ​​de usuário fora de um procedimento armazenado, mas também pode defini-las dentro de um procedimento armazenado, e o efeito é que a variável retém o valor após o retorno da chamada do procedimento.

Então, no seu exemplo, o seguinte também faria a mesma coisa:
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;

Não há problema em várias sessões definirem a variável de usuário dessa maneira simultaneamente, porque as variáveis ​​de usuário têm o escopo de uma única sessão e as sessões simultâneas podem ter variáveis ​​com o mesmo nome, mas com valores diferentes.

A sintaxe de variável sem prefixo @ é para variáveis ​​locais para o procedimento, sejam parâmetros de procedimento, ou então variáveis ​​locais declaradas com DECLARAR dentro do corpo do procedimento.

Esse uso que você tem, passando uma variável de usuário como parâmetro e atribuindo-a no corpo do procedimento, é útil se você quiser chamar um procedimento várias vezes e armazenar o resultado em variáveis ​​de usuário separadas. Caso contrário, cada chamada para o procedimento substituiria o valor anterior na variável de usuário @empCount para a sessão atual.