MySQL LEAVE语句

时间:2019-11-20 08:52:31  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL LEAVE语句退出存储的程序或终止循环。

MySQL LEAVE语句简介

LEAVE语句退出具有给定标签的流控制。

下面显示了LEAVE语句的基本语法:

LEAVE label;

使用这种语法,您可以在LEAVE关键字之后指定要退出的块的标签。

使用LEAVE语句退出存储过程

如果标签在存储过程或功能块的最外面,则LEAVE终止存储过程或功能。

以下语句显示如何使用LEAVE语句退出存储过程:

CREATE PROCEDURE sp_name()
sp: BEGIN
    IF condition THEN
        LEAVE sp;
    END IF;
    -- other statement
END$$

例如,以下语句创建一个新的存储过程,该过程检查示例数据库中的customers表中给定客户的信用:

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 ;

在循环中使用LEAVE语句

LEAVE语句允许您终止循环。
在LOOP,REPEAT和WHILE语句中使用时,LEAVE语句的一般语法。

将LEAVE与LOOP语句一起使用:

[label]: LOOP
    IF condition THEN
        LEAVE [label];
    END IF;
    -- statements
END LOOP [label];

将LEAVE与REPEAT语句一起使用:

[label:] REPEAT
    IF condition THEN
        LEAVE [label];
    END IF;
    -- statements
UNTIL search_condition
END REPEAT [label];

将LEAVE与WHILE语句一起使用:

[label:] WHILE search_condition DO
    IF condition THEN
        LEAVE [label];
    END IF;
    -- statements
END WHILE [label];

LEAVE使标签指定的电流循环终止。
如果一个循环包含在另一个循环中,则可以使用单个LEAVE语句退出两个循环。

在循环示例中使用LEAVE语句

以下存储过程生成一个整数字符串,其整数从1到4到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 ;

该语句调用LeaveDemo过程:

CALL LeaveDemo(@result);
SELECT @result;

这是输出之一:

+------------------+
| @result          |
+------------------+
| 1,2,3,4,5,6,7,8, |
+------------------+
1 row in set (0.00 sec)

在本教程中,您学习了如何使用MySQL LEAVE语句退出存储的程序或终止循环。