MySQL SAIR

Resumo : neste tutorial, você aprenderá como usar a LEAVEinstrução MySQL para sair de um programa armazenado ou encerrar um loop.

Introdução à instrução MySQL LEAVE

A LEAVEinstrução sai do controle de fluxo que possui um determinado rótulo.

O seguinte mostra a sintaxe básica da LEAVEinstruçã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 LEAVEpalavra-chave.

Usando a instrução LEAVE para sair de um procedimento armazenado

Se labelfor o mais externo do procedimento armazenado   ou bloco de funções , LEAVEencerra o procedimento armazenado ou a função.

A instrução a seguir mostra como usar a LEAVEinstruçã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 customerstabela 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 LEAVEinstrução permite encerrar um loop. A sintaxe geral da LEAVEinstrução quando usada nas instruções LOOPe .REPEATWHILE

Usando LEAVEcom a LOOPdeclaraçã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 LEAVEcom a REPEATdeclaraçã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 LEAVEcom a WHILEdeclaraçã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 LEAVEfaz com que o loop de corrente especificado por labelseja encerrado. Se um loop estiver dentro de outro loop, você poderá sair de ambos os loops com uma única LEAVEinstruçã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 LeaveDemoprocedimento:

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 LEAVEpara sair de um procedimento armazenado ou encerrar um loop.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *