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;//

输出

以下是上述查询的输出:

结果
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
广告
© . All rights reserved.