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 |