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 @
signe, comme ceci : @var
Vous pouvez initialiser cette variable avec un SET
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 pas précédées d'un 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 pour NULL
à chaque fois que la procédure est appelée, alors que la variable spécifique à la session ne l'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 fois que la procédure est appelée, alors que @var2
(variable spécifique à la session) ne l'est pas.
(En plus des variables définies par l'utilisateur, MySQL également possède certaines "variables système" prédéfinies, qui peuvent être des "variables globales" telles que @@global.port
ou des "variables de session" telles que @@session.sql_mode
; ces "variables de session" n'ont aucun rapport avec les variables définies par l'utilisateur spécifiques à la session).
1 votes
Je suis familier avec MsSQL et l'idée de poser une telle question ne m'a jamais effleuré. Les réponses fournies ici m'ont éclairé sur quelque chose dont je n'avais aucune idée ! Merci.