MySQL
tiene el concepto de variables definidas por el usuario .
Son variables poco escritas que pueden inicializarse en algún lugar de una sesión y mantener su valor hasta que finalice la sesión.
Están antepuestos con un @
signo, como este:@var
Puede inicializar esta variable con una SET
declaración o dentro de una consulta:
SET @var = 1
SELECT @var2 := 2
Cuando desarrolla un procedimiento almacenado en MySQL
, puede pasar los parámetros de entrada y declarar las variables locales:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Estas variables no se anteponen con ningún prefijo.
La diferencia entre una variable de procedimiento y una variable definida por el usuario específica de sesión es que la variable de procedimiento se reinicia NULL
cada vez que se llama al procedimiento, mientras que la variable específica de sesión no es:
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 puede ver, var2
(variable de procedimiento) se reinicia cada vez que se llama al procedimiento, mientras que @var2
(variable específica de la sesión) no.
(Además de las variables definidas por el usuario, MySQL también tiene algunas "variables del sistema" predefinidas, que pueden ser "variables globales" como @@global.port
"variables de sesión" como @@session.sql_mode
; estas "variables de sesión" no están relacionadas con las definidas por el usuario específicas de la sesión variables.)