MySQL
ha il concetto di variabili definite dall'utente .
Sono variabili tipicamente vaghe che possono essere inizializzate da qualche parte in una sessione e mantengono il loro valore fino al termine della sessione.
Sono preceduti da un @
segno, come questo:@var
È possibile inizializzare questa variabile con SET
un'istruzione o all'interno di una query:
SET @var = 1
SELECT @var2 := 2
Quando si sviluppa una stored procedure in MySQL
, è possibile passare i parametri di input e dichiarare le variabili locali:
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
Queste variabili non sono anteposte a nessun prefisso.
La differenza tra una variabile di procedura e una variabile definita dall'utente specifica della sessione è che la variabile della procedura viene reinizializzata NULL
ogni volta che viene chiamata la procedura, mentre la variabile specifica della sessione non è:
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
Come puoi vedere, var2
(variabile di procedura) viene reinizializzata ogni volta che viene chiamata la procedura, mentre @var2
(variabile specifica della sessione) non lo è.
(Oltre alle variabili definite dall'utente, MySQL ha anche alcune "variabili di sistema" predefinite, che possono essere "variabili globali" come @@global.port
o "variabili di sessione" come @@session.sql_mode
; queste "variabili di sessione" non sono correlate a determinate dall'utente definite dalla sessione variabili.)