MySQL har et koncept med brugerdefinerede variabler .
De er løst indtastede variabler, der kan initialiseres et sted i en session og bevarer deres værdi, indtil sessionen slutter.
De er sat foran med en @
tegn som dette:@var
Du kan initialisere denne variabel med en SET
sætning eller inde i en forespørgsel:
SET @var = 1
SELECT @var2 := 2
Når du udvikler en lagret procedure i MySQL, kan du videregive inputparametrene og erklære de lokale variabler:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Disse variabler er ikke sat foran med nogen præfikser.
Forskellen mellem en procedurevariabel og en sessionsspecifik brugerdefineret variabel er, at en procedurevariabel geninitialiseres til NULL
hver gang proceduren kaldes, mens den sessionsspecifikke variabel ikke er:
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
Som du kan se, var2
(procedurevariabel) geninitialiseres hver gang proceduren kaldes, mens @var2
(sessionsspecifik variabel) er ikke.
(Ud over brugerdefinerede variabler, MySQL også har nogle foruddefinerede "systemvariabler", som kan være "globale variabler", såsom @@global.port
eller "sessionsvariabler" såsom @@session.sql_mode
; disse "sessionsvariabler" er ikke relateret til sessionsspecifikke brugerdefinerede variabler.)