Dichiarare e utilizzare le variabili in MySQL

Gustavo du Mortier 14 aprile 2021
  1. Variabili definite dall’utente in MySQL
  2. Inizializza variabili definite dall’utente
  3. Usa variabili come campi in un’istruzione SELECT
  4. Dichiarare le variabili locali in MySQL
  5. Dichiarare le variabili di sistema in MySQL
Dichiarare e utilizzare le variabili in MySQL

In questo articolo del tutorial, spiegheremo come dichiarare le variabili all’interno del codice SQL per i database MySQL.

Sugli script SQL, è possibile utilizzare le variabili per memorizzare i valori durante l’esecuzione di una sequenza di comandi e utilizzarli al posto dei valori letterali.

Variabili definite dall’utente in MySQL

MySQL riconosce diversi tipi di variabili. Il primo tipo sono le variabili definite dall’utente, identificate da un simbolo @ usato come prefisso. In MySQL, puoi accedere alle variabili definite dall’utente senza dichiararle o inizializzarle in precedenza. In tal caso, alla variabile viene assegnato un valore NULL quando viene inizializzata. Ad esempio, se usi SELEZIONA con una variabile senza darle un valore, come in questo caso:

SELECT @SomeVariable;

MySQL restituisce un valore NULL.

Inizializza variabili definite dall’utente

Per inizializzare una variabile definita dall’utente, è necessario utilizzare un’istruzione SET o SELECT. Puoi inizializzare molte variabili contemporaneamente, separando ogni istruzione di assegnazione con una virgola, in questo modo:

SET @FirstVar=1, @SecondVar=2;

Una volta assegnato un valore a una variabile, questa avrà un tipo in base al valore dato. Negli esempi precedenti, @FirstVar e @SecondVar sono di tipo int.

La durata di una variabile definita dall’utente dura finché la sessione è attiva ed è invisibile alle altre sessioni. Una volta chiusa la sessione, la variabile scompare.

Esistono 5 tipi di dati che è possibile assegnare a una variabile definita dall’utente:

  • stringa (binaria o non binaria)
  • numero intero
  • decimale
  • virgola mobile
  • NULL, che può essere associato a qualsiasi tipo.

Per assegnare un valore a una variabile, puoi utilizzare il simbolo = o =. Le due seguenti affermazioni hanno lo stesso effetto:

SET @MyIntVar = 1;
SET @MyIntVar := 1;

Usa variabili come campi in un’istruzione SELECT

Le variabili possono essere parte degli liste di campi di un’istruzione SELECT. È possibile combinare variabili e nomi di campo quando si specificano i campi in una selezione, come in questo esempio:

SET @IndexVar := 1;
SELECT @IndexVar, ISBN FROM Books;

Dichiarare le variabili locali in MySQL

Le variabili locali non hanno bisogno del prefisso @ nei loro nomi, ma devono essere dichiarate prima di poter essere utilizzate. Per dichiarare una variabile locale, puoi usare l’istruzione DECLARE o usarla come parametro all’interno di una dichiarazione STORED PROCEDURE.

Quando si dichiara una variabile locale, facoltativamente, è possibile assegnarle un valore predefinito. Se non assegni alcun valore predefinito, la variabile viene inizializzata con un valore NULL.

Ogni variabile vive all’interno di uno scope, delimitato dal blocco BEGIN ... END che contiene la sua dichiarazione.

L’esempio seguente illustra due modi diversi di utilizzare le variabili locali: come parametro di procedura e come variabile interna alla procedura:

DELIMITER $$

CREATE PROCEDURE GetUpdatedPrices(itemcount INT)
BEGIN
	DECLARE factor DECIMAL(5, 2);
	SET factor:=3.45;
	SELECT PartNo, Description, itemcount * factor * ListPrice FROM Catalogue;
END
$$

DELIMITER ;

Nell’esempio precedente, la variabile itemcount è usata come parametro per passare un valore alla procedura. Quella variabile viene successivamente utilizzata nell’istruzione SELECT per moltiplicare il campo ListPrice ottenuto dalla tabella. La variabile locale fattore viene utilizzata per memorizzare un valore decimale utilizzato per moltiplicare il prezzo risultante.

Dichiarare le variabili di sistema in MySQL

Esiste un terzo tipo di variabili chiamate variabili di sistema utilizzate per memorizzare valori che influenzano le singole connessioni client (variabili SESSIONE) o influenzano l’intera operazione del server (variabili GLOBALI).

Le variabili di sistema vengono solitamente impostate all’avvio del server. Per farlo, puoi usare la riga di comando o includere l’istruzione SET in un file di opzioni. Ma i loro valori possono essere modificati all’interno di uno script SQL.

Le variabili di sistema possono essere identificate utilizzando un doppio segno @ come prefisso o utilizzando le parole GLOBAL o SESSION nell’istruzione SET. Un altro modo per differenziare le variabili di sistema GLOBAL e SESSION è usare un secondo prefisso: global o session. Di seguito sono riportati alcuni esempi di come assegnare valori alle variabili di sistema:

-- Alternative ways to set session system variables:
SET interactive_timeout=30000;
SET SESSION interactive_timeout=30000;
SET @@interactive_timeout=30000;
SET @@local.interactive_timeout=30000;

-- Alternative ways to set global system variables:
SET @@global.interactive_timeout=30000;
SET GLOBAL interactive_timeout=30000;

Per vedere le variabili di sistema in uso all’interno di una sessione o nel server, è possibile utilizzare l’istruzione SHOW VARIABLES. È possibile aggiungere un operatore di confronto per filtrare questo lista se si desidera ottenere il valore di alcune variabili specifiche. Per esempio:

SHOW VARIABLES LIKE '%timeout%'