O MySQL tem um conceito de variáveis definidas pelo usuário .
Elas são variáveis de tipo flexível que podem ser inicializadas em algum lugar em uma sessão e mantêm seu valor até que a sessão termine.
Eles são prefixados com um
@
assinar, assim:@var
Você pode inicializar esta variável com um
SET
declaração ou dentro de uma consulta:SET @var = 1
SELECT @var2 := 2
Ao desenvolver um procedimento armazenado no MySQL, você pode passar os parâmetros de entrada e declarar as variáveis locais:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Essas variáveis não são prefixadas com nenhum prefixo.
A diferença entre uma variável de procedimento e uma variável definida pelo usuário específica da sessão é que uma variável de procedimento é reinicializada para
NULL
cada vez que o procedimento é chamado, enquanto a variável específica da sessão não é:CREATE PROCEDURE prc_test ()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 = var2 + 1;
SET @var2 = @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
Como você pode ver,
var2
(variável de procedimento) é reinicializado cada vez que o procedimento é chamado, enquanto @var2
(variável específica da sessão) não é. (Além das variáveis definidas pelo usuário, o MySQL também tem algumas "variáveis de sistema" predefinidas, que podem ser "variáveis globais", como
@@global.port
ou "variáveis de sessão", como @@session.sql_mode
; essas "variáveis de sessão" não estão relacionadas a variáveis definidas pelo usuário específicas da sessão.)