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
廣告