MySQL má koncept uživatelsky definovaných proměnných .
Jsou to volně napsané proměnné, které mohou být inicializovány někde během relace a uchovávají si svou hodnotu až do konce relace.
Před nimi je znak @
podepsat takto:@var
Tuto proměnnou můžete inicializovat pomocí SET
příkazu nebo uvnitř dotazu:
SET @var = 1
SELECT @var2 := 2
Když vyvíjíte uloženou proceduru v MySQL, můžete předat vstupní parametry a deklarovat lokální proměnné:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Před těmito proměnnými nejsou žádné předpony.
Rozdíl mezi proměnnou procedury a uživatelsky definovanou proměnnou specifickou pro relaci je v tom, že proměnná procedury je znovu inicializována na NULL
pokaždé, když je procedura volána, zatímco proměnná specifická pro relaci není:
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
Jak můžete vidět, var2
(proměnná procedury) se znovu inicializuje při každém volání procedury, zatímco @var2
(proměnná specifická pro relaci) není.
(Kromě uživatelsky definovaných proměnných, MySQL také má některé předdefinované "systémové proměnné", což mohou být "globální proměnné", jako je @@global.port
nebo "proměnné relace" jako @@session.sql_mode
; tyto "proměnné relace" nesouvisí s proměnnými definovanými uživatelem pro danou relaci.)