Resumo : neste tutorial, você aprenderá sobre as variáveis do procedimento armazenado do MySQL, incluindo como declará-las e usá-las.
Uma variável é um objeto de dados nomeado cujo valor pode mudar durante a execução de um procedimento armazenado .
Normalmente, você usa variáveis para manter resultados imediatos. Essas variáveis são locais para o procedimento armazenado.
Antes de usar uma variável, você precisa declará-la.
Declarando variáveis
Para declarar uma variável dentro de um procedimento armazenado, você usa a DECLARE
seguinte instrução:
DECLARE variable_name datatype(size) [DEFAULT default_value];
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
- Primeiro, especifique o nome da variável após a
DECLARE
palavra-chave. Certifique-se de que o nome da variável esteja de acordo com as regras de nomenclatura de colunas da tabela MySQL. - Segundo, defina o tipo de dados e o comprimento da variável. As variáveis podem ter qualquer tipo de dados MySQL , como
INT
,,VARCHAR
eDATETIME
. - Terceiro, atribua um valor padrão à variável usando a
DEFAULT
opção. Se você declarar uma variável sem especificar um valor padrão, seu valor padrão seráNULL
.
O exemplo a seguir declara uma variável nomeada totalSale
com o tipo de dados DEC(10,2)
e valor padrão de 0.0
:
DECLARE totalSale DEC(10,2) DEFAULT 0.0;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL permite declarar duas ou mais variáveis que compartilham o mesmo tipo de dados usando uma única DECLARE
instrução.
Por exemplo, o exemplo a seguir declara duas variáveis inteiras totalQty
e stockCount
e define seus valores padrão como zero.
DECLARE totalQty, stockCount INT DEFAULT 0;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Depois de declarar uma variável, você pode começar a usá-la.
A partir do MySQL 8.0.34, não é possível declarar múltiplas variáveis com diferentes tipos de dados usando uma única instrução DECLARE.
Por exemplo, a declaração a seguir causará um erro de sintaxe:
DECLARE amount DECMIAL(10,2),
currency CHAR(3) DEFAULT 'USD';
Linguagem de código: PHP ( php )
Para corrigir o erro, você precisa usar várias DECLARE
instruções da seguinte maneira:
DECLARE amount DECMIAL(10,2);
DECLARE currency CHAR(3) DEFAULT 'USD';
Linguagem de código: PHP ( php )
Atribuindo variáveis
Para atribuir um valor a uma variável, você usa a SET
instrução:
SET variable_name = value;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo:
DECLARE total INT DEFAULT 0;
SET total = 10;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O valor da total
variável está 10
após a atribuição.
Além da SET
instrução, você pode usá- SELECT INTO
la para atribuir o resultado de uma consulta a uma variável, conforme mostrado no exemplo a seguir:
DECLARE productCount INT DEFAULT 0;
SELECT COUNT(*)
INTO productCount
FROM products;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo:
- Primeiro, declare uma variável nomeada
productCount
e inicialize seu valor como0
. - Em seguida, use a
SELECT INTO
instrução para atribuir àproductCount
variável o número de produtos selecionados naproducts
tabela.
Escopos variáveis
Uma variável tem seu próprio escopo, que determina seu tempo de vida. Se você declarar uma variável dentro de um procedimento armazenado, ela estará fora do escopo quando a END
instrução do procedimento armazenado for alcançada.
Quando você declara uma variável dentro do BEGIN...END
bloco, ela sai do escopo quando END
é atingido.
MySQL permite que você declare duas ou mais variáveis que compartilham o mesmo nome em escopos diferentes porque uma variável só é eficaz dentro de seu escopo.
Porém, declarar variáveis com o mesmo nome em escopos diferentes não é considerada uma boa prática de programação.
Uma variável cujo nome começa com o @
sinal é uma variável de sessão , disponível e acessível até o término da sessão.
Exemplo de variável de procedimento armazenado MySQL
O exemplo a seguir ilustra como declarar e usar uma variável em um procedimento armazenado:
DELIMITER $$
CREATE PROCEDURE GetTotalOrder()
BEGIN
DECLARE totalOrder INT DEFAULT 0;
SELECT
COUNT(*)
INTO totalOrder FROM
orders;
SELECT totalOrder;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como funciona.
Primeiro, declare uma variável totalOrder
com valor padrão zero. Esta variável armazenará o número de pedidos da orders
tabela.
DECLARE totalOrder INT DEFAULT 0;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, use a SELECT INTO
instrução para atribuir à variável totalOrder
o número de pedidos selecionados na orders
tabela:
SELECT COUNT(*)
INTO totalOrder
FROM orders;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, selecione o valor da variável totalOrder
.
SELECT totalOrder;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que você aprenderá como usar variáveis de forma prática nos tutoriais subsequentes. O exemplo neste tutorial serve como ilustração para ajudá-lo a entender o conceito.
Esta instrução chama o procedimento armazenado GetTotalOrder()
:
CALL GetTotalOrder();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída:
Resumo
- Use variáveis para armazenar resultados imediatos em um procedimento armazenado.
- O escopo de uma variável determina o tempo de vida da variável.