Declare e Use Variables no MySQL

Gustavo du Mortier 30 janeiro 2023
  1. Variáveis Definidas pelo Utilizador no MySQL
  2. Inicializar Variáveis Definidas pelo Utilizador
  3. Utilizar Variáveis como Campos numa Declaração SELECT
  4. Declare Variáveis Locais no MySQL
  5. Declarar Variáveis de Sistema no MySQL
Declare e Use Variables no MySQL

Neste artigo tutorial, vamos explicar como declarar variáveis dentro do código SQL para bases de dados MySQL.

Em scripts SQL, é possível utilizar variáveis para armazenar valores durante a execução de uma sequência de comandos e utilizá-los em vez de literais.

Variáveis Definidas pelo Utilizador no MySQL

O MySQL reconhece diferentes tipos de variáveis. O primeiro tipo são as variáveis definidas pelo utilizador, identificadas por um símbolo @ utilizado como um prefixo. No MySQL, é possível aceder a variáveis definidas pelo utilizador sem as declarar ou inicializar previamente. Se o fizer, um valor NULL é atribuído à variável quando esta é inicializada. Por exemplo, se utilizar SELECT com uma variável sem lhe atribuir um valor, como neste caso:

SELECT @SomeVariable;

O MySQL devolve um valor NULL.

Inicializar Variáveis Definidas pelo Utilizador

Para inicializar uma variável definida pelo utilizador, é necessário utilizar uma declaração SET ou SELECT. É possível inicializar muitas variáveis ao mesmo tempo, separando cada declaração de atribuição com uma vírgula, como esta:

SET @FirstVar=1, @SecondVar=2;

Uma vez atribuído um valor a uma variável, esta terá um tipo de acordo com o valor dado. Nos exemplos anteriores, @FirstVar e @SecondVar são do tipo int.

A duração de uma variável definida pelo utilizador dura enquanto a sessão estiver activa, e é invisível para outras sessões. Uma vez encerrada a sessão, a variável desaparece.

Há 5 tipos de dados que pode atribuir a uma variável definida pelo utilizador:

  • string (binária ou não binária)
  • inteiro
  • decimal
  • ponto flutuante
  • NULL, que pode ser associado a qualquer tipo.

Para atribuir um valor a uma variável, pode utilizar o símbolo = ou :=. As duas afirmações seguintes têm o mesmo efeito:

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

Utilizar Variáveis como Campos numa Declaração SELECT

As variáveis podem fazer parte das listas de campo de uma declaração SELECT. Pode misturar variáveis e nomes de campo quando especifica campos numa selecção, como neste exemplo:

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

Declare Variáveis Locais no MySQL

As variáveis locais não precisam do prefixo @ nos seus nomes, mas devem ser declaradas antes de poderem ser utilizadas. Para declarar uma variável local, pode utilizar a declaração DECLARE ou utilizá-la como parâmetro dentro de uma declaração STORED PROCEDURE.

Quando se declara uma variável local, opcionalmente, pode ser-lhe atribuído um valor por defeito. Se não atribuir qualquer valor por defeito, a variável é inicializada com um valor NULL.

Cada variável vive dentro de um âmbito, delimitado pelo bloco BEGIN ... END que contém a sua declaração.

O exemplo seguinte ilustra duas formas diferentes de utilizar variáveis locais: como parâmetro de procedimento e como variável interna ao procedimento:

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 ;

No exemplo anterior, a variável itemcount é utilizada como parâmetro para passar um valor para o procedimento. Essa variável é posteriormente utilizada na declaração SELECT para multiplicar o campo ListPrice obtido a partir da tabela. A variável local factor é utilizada para armazenar um valor decimal utilizado para multiplicar o preço resultante.

Declarar Variáveis de Sistema no MySQL

Há um terceiro tipo de variável chamada variáveis de sistema utilizadas para armazenar valores que afectam as ligações individuais dos clientes (variáveis SESSION) ou afectam toda a operação do servidor (variáveis GLOBAL).

As variáveis do sistema são normalmente definidas no arranque do servidor. Para o fazer, pode utilizar a linha de comando ou incluir a declaração SET num ficheiro de opções. Mas os seus valores podem ser modificados dentro de um script SQL.

As variáveis de sistema podem ser identificadas utilizando um duplo sinal @ como prefixo ou utilizando as palavras GLOBAL ou SESSION na instrução SET. Outra forma de diferenciar as variáveis de sistema GLOBAL e SESSION é utilizar um segundo prefixo: global ou session. Aqui estão alguns exemplos de como se pode atribuir valores a variáveis de 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;

Para ver as variáveis do sistema em utilização dentro de uma sessão ou no servidor, pode utilizar a declaração SHOW VARIABLES. Pode adicionar um operador de comparação para filtrar esta lista se quiser obter o valor de algumas variáveis específicas. Por exemplo:

SHOW VARIABLES LIKE '%timeout%'