• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • BEGIN ... END复合语句

    [begin_label:] BEGIN
        [statement_list]
    END [end_label]
    

    BEGIN ... END语法用于编写复合语句,复合语句可以出现在存储程序(存储过程和函数,触发器和事件)中。复合语句可以包含多个语句,BEGIN并用和END关键字括起来。statement_list表示一个或多个语句的列表,每个语句以分号(;)语句定界符终止。在statement_list本身是可选的,所以空复合语句(BEGIN END)是合法的。

    BEGIN ... END块可以嵌套。

    使用多个语句要求客户端能够发送包含;语句定界符的语句字符串。在mysql命令行客户端中,这是通过delimiter命令处理的。将;语句结尾定界符更改为(例如//;可以在程序主体中使用。有关示例,请参见“定义存储程序”。

    BEGIN ... END可以标记一个块。

    [NOT] ATOMIC不支持 optional 子句。这意味着在指令块的开始处未设置任何事务保存点,并且BEGIN在此上下文中使用的子句对当前事务没有影响。

    注意

    在所有存储的程序中,解析器将BEGIN[WORK]视为BEGIN ... END块的开始。要在这种情况下开始交易,请START TRANSACTION改用。


    语句标签

    [begin_label:] BEGIN
        [statement_list]
    END [end_label]
    
    [begin_label:] LOOP
        statement_list
    END LOOP [end_label]
    
    [begin_label:] REPEAT
        statement_list
    UNTIL search_condition
    END REPEAT [end_label]
    
    [begin_label:] WHILE search_condition DO
        statement_list
    END WHILE [end_label]
    

    标签被允许BEGIN ... END块和对LOOPREPEATWHILE语句。这些语句的标签使用遵循以下规则:

    • begin_label必须在冒号后面。
    • begin_label可以不带给出end_label。如果end_label存在,则必须与相同begin_label
    • end_label没有不能给予begin_label
    • 同一嵌套级别的标签必须不同。
    • 标签最多可包含16个字符。

    要引用带标签的构造中的标签,请使用ITERATELEAVE语句。下面的示例使用这些语句继续迭代或终止循环:

    CREATE PROCEDURE doiterate(p1 INT)
    BEGIN
      label1: LOOP
        SET p1 = p1 + 1;
        IF p1 < 10 THEN ITERATE label1; END IF;
        LEAVE label1;
      END LOOP label1;
    END;
    

    块标签的范围不包括在块内声明的处理程序的代码。有关详细信息,请参见“ DECLARE ... HANDLER语句”。


    DECLARE声明

    DECLARE语句用于定义程序本地的各种项目:

    DECLARE仅允许在BEGIN ... END复合语句内部使用,并且必须在复合语句的开始处以及其他任何语句之前。

    声明必须遵循一定顺序。游标声明必须出现在处理程序声明之前。变量和条件声明必须出现在游标或处理程序声明之前。