Resumo : neste tutorial, você aprenderá como usar a LEAVE
instrução MySQL para sair de um programa armazenado ou encerrar um loop.
Introdução à instrução MySQL LEAVE
A LEAVE
instrução sai do controle de fluxo que possui um determinado rótulo.
O seguinte mostra a sintaxe básica da LEAVE
instrução:
LEAVE label;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, você especifica o rótulo do bloco do qual deseja sair após a LEAVE
palavra-chave.
Usando a instrução LEAVE para sair de um procedimento armazenado
Se label
for o mais externo do procedimento armazenado ou bloco de funções , LEAVE
encerra o procedimento armazenado ou a função.
A instrução a seguir mostra como usar a LEAVE
instrução para sair de um procedimento armazenado:
CREATE PROCEDURE sp_name()
sp: BEGIN
IF condition THEN
LEAVE sp;
END IF;
-- other statement
END$$
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, esta instrução cria um novo procedimento armazenado que verifica o crédito de um determinado cliente na customers
tabela do banco de dados de exemplo :
DELIMITER $$
CREATE PROCEDURE CheckCredit(
inCustomerNumber int
)
sp: BEGIN
DECLARE customerCount INT;
-- check if the customer exists
SELECT
COUNT(*)
INTO customerCount
FROM
customers
WHERE
customerNumber = inCustomerNumber;
-- if the customer does not exist, terminate
-- the stored procedure
IF customerCount = 0 THEN
LEAVE sp;
END IF;
-- other logic
-- ...
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando a instrução LEAVE em loops
A LEAVE
instrução permite encerrar um loop. A sintaxe geral da LEAVE
instrução quando usada nas instruções LOOP
e .REPEAT
WHILE
Usando LEAVE
com a LOOP
declaração:
[label]: LOOP
IF condition THEN
LEAVE [label];
END IF;
-- statements
END LOOP [label];
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando LEAVE
com a REPEAT
declaração:
[label:] REPEAT
IF condition THEN
LEAVE [label];
END IF;
-- statements
UNTIL search_condition
END REPEAT [label];
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usando LEAVE
com a WHILE
declaração:
[label:] WHILE search_condition DO
IF condition THEN
LEAVE [label];
END IF;
-- statements
END WHILE [label];
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Isso LEAVE
faz com que o loop de corrente especificado por label
seja encerrado. Se um loop estiver dentro de outro loop, você poderá sair de ambos os loops com uma única LEAVE
instrução.
Usando a instrução LEAVE em um exemplo de loop
O procedimento armazenado a seguir gera uma sequência de números inteiros com o número de 1 a um número aleatório entre 4 e 10:
DELIMITER $$
CREATE PROCEDURE LeaveDemo(OUT result VARCHAR(100))
BEGIN
DECLARE counter INT DEFAULT 1;
DECLARE times INT;
-- generate a random integer between 4 and 10
SET times = FLOOR(RAND()*(10-4+1)+4);
SET result = '';
disp: LOOP
-- concatenate counters into the result
SET result = concat(result,counter,',');
-- exit the loop if counter equals times
IF counter = times THEN
LEAVE disp;
END IF;
SET counter = counter + 1;
END LOOP;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta declaração chama o LeaveDemo
procedimento:
CALL LeaveDemo(@result);
SELECT @result;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está uma das saídas:
+------------------+
| @result |
+------------------+
| 1,2,3,4,5,6,7,8, |
+------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use a instrução MySQL
LEAVE
para sair de um procedimento armazenado ou encerrar um loop.