Variáveis de Usuário


O MariaDB suporta variáveis específicas da conexão com a sintaxe @nomevariável. Um nome de variável pode consiste de caracteres alfanuméricos do conjunto de caracteres atual e também '_', '$' e '.'. O conjunto de caracteres padrão é ISO-8859-1 Latin1; ele pode ser alterado com a opção --default-character-set do mysqld. See "O Conjunto de Caracteres Utilizado para Dados e Ordenação". Os nomes das variáveis de usuários são caso insensitivo nas versão >= 5.0 e caso sensitivo nas versões < 5.0.

As variáveis não precisam ser inicializadas. Elas contém NULL por padrão e podem armazenar um valor inteiro, real ou uma string. Todas as variáveis de uma thread são automaticamente liberadas quando uma thread termina.

Você pode configurar uma variavel com a syntaxe SET.

SET @variável= { expressao inteira | expressao real | expressao string }
[,@variável= ...].

Você também pode atribuir um valor a uma variável em outras instruções diferentes de SET. No entanto, neste caso o operador de atribuição é := em vez de =, porque = é reservado para comparações em instruções diferentes de SET:

mysql> SET @t1=0, @t2=0, @t3=0;
mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+

Variáveis de usuários devem ser utilizadas em expressões onde são permitidas. Isto não inclui utiliza-las em contextos onde um número é explicitamente necessário, assim como na cláusula LIMIT de uma instrução SELECT ou a clausula IGNORE number LINES de uma instrução LOAD DATA.

NOTE: Em uma instrução SELECT, cada expressão só é avaliada quando enviada ao cliente. Isto significa que nas cláusula HAVING, GROUP BY, ou ORDER BY, você não pode fazer referência a uma expreesão que envolve variáveis que são configuradas na instrução SELECT. Por examplo, a seguinte instrução NÃO funcionará como o esperado:

SELECT (@aa:=id) AS a, (@aa+3) AS b FROM nome_tabela HAVING b=5;

A razão é que o @aa não irá conter o valor da linha atual, mas o valor da id da linha previamente aceita.

A regra geral é nunca atribuir e usar a mesma variável na mesma instrução.

Outra questão com configurar uma variável e usá-la na mesma instrução é que o tipo do resultado padrão de uma variável é baseada no tipo da variável no início da instrução. (Assume-se que uma variável não atribuída possui o valor NULL e é do tipo STRING). O seguitne exemplo ilustra isto:

mysql> SET @a='test';
mysql> SELECT @a,(@a:=20) FROM table_name;

Neste caso o MariaDB relatará ao cliente que a coluna 1 é uma string e converte todos os acessos de @a a strings, mesmo que @a seja configurada com um número para a segunda linha. Depois que a instrução é executada @a será considerado como um número.

Se você tiver qualquer problema com isto, evite tanto configurar e usar a mesma variável na mesma instrução ou configurar a variável com 0, 0.0 ou '' antes de usá-la.

Retornar