MySQL a un concept de variables définies par l'utilisateur .
Ce sont des variables faiblement typées qui peuvent être initialisées quelque part dans une session et conserver leur valeur jusqu'à la fin de la session.
Ils sont précédés d'un @
signer, comme ceci :@var
Vous pouvez initialiser cette variable avec un SET
instruction ou dans une requête :
SET @var = 1
SELECT @var2 := 2
Lorsque vous développez une procédure stockée dans MySQL, vous pouvez passer les paramètres d'entrée et déclarer les variables locales :
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Ces variables ne sont précédées d'aucun préfixe.
La différence entre une variable de procédure et une variable définie par l'utilisateur spécifique à la session est qu'une variable de procédure est réinitialisée à NULL
à chaque appel de la procédure, alors que la variable propre à la session n'est pas :
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
Comme vous pouvez le voir, var2
(variable de procédure) est réinitialisée à chaque appel de la procédure, tandis que @var2
(variable spécifique à la session) ne l'est pas.
(En plus des variables définies par l'utilisateur, MySQL également a des "variables système" prédéfinies, qui peuvent être des "variables globales" telles que @@global.port
ou "variables de session" telles que @@session.sql_mode
; ces "variables de session" ne sont pas liées aux variables définies par l'utilisateur spécifiques à la session.)