MySQL - 语句标签
MySQL 中的 BEGIN ... END 复合语句包含多个语句;每个语句以分号(或当前分隔符)结尾。这些语句以 BEGIN 开头,以 END 结尾。
存储过程、函数、触发器和事件都是 MySQL 中的复合语句。复合语句可以包含其他块,例如变量声明、条件、游标,包括循环和条件测试。
我们可以使用此标签标记 LOOP、REPEAT 和 WHILE 语句以及 BEGIN ... END 块的起始和结束语句。
语法
以下是 MySQL 中语句标签的语法 -
begin_label: [LOOP | REPEAT |WHILE] statement_list [END LOOP | REPEAT |WHILE] end_label
使用这些语句标签时,需要牢记以下几点。
- 通常,这些语句都有一个开始标签和一个结束标签。
- 开始标签和结束标签的标签必须相同。
- 一旦有了开始标签,就不必结束它。
- 如果使用嵌套标签,则名称应该不同。
- 这些标签的长度最多为 16 个字符。
- 如果需要在另一个带标签的块或循环中使用标签,则需要使用 ITERATE 或 LEAVE 语句。
示例 1
以下查询演示了语句标签在过程中的用法 -
Delimiter //
CREATE procedure loopDemo()
label:BEGIN
DECLARE val INT ;
DECLARE result VARCHAR(255);
SET val =1;
SET result = '';
loop_label: LOOP
IF val > 10 THEN
LEAVE loop_label;
END IF;
SET result = CONCAT(result,val,',');
SET val = val + 1;
ITERATE loop_label;
END LOOP;
SELECT result;
END//
您可以按如下方式调用上述过程 -
call loopDemo;//
输出
以下是上述查询的输出 -
| Result |
|---|
| 1,2,3,4,5,6,7,8,9,10 |
示例 2
以下是另一个示例 -
DELIMITER //
CREATE FUNCTION Sample (bonus INT)
RETURNS INT
BEGIN
DECLARE income INT;
SET income = 0;
myLabel: LOOP
SET income = income + bonus;
IF income < 10000 THEN
ITERATE myLabel;
END IF;
LEAVE myLabel;
END LOOP myLabel;
RETURN income;
END; //
mysql> DELIMITER ;
您可以调用上面创建的函数,如下所示 -
SELECT Sample(1000);
上述查询产生以下输出 -
| Sample(1000) |
|---|
| 10000 |

