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_listEND LOOP [end_label] [begin_label:]REPEAT statement_listUNTIL search_conditionEND REPEAT [end_label] [begin_label:]WHILE search_conditionDO statement_listEND WHILE [end_label]
标签被允许BEGIN ... END块和对LOOP,REPEAT和WHILE语句。这些语句的标签使用遵循以下规则:
- begin_label必须在冒号后面。
- begin_label可以不带给出- end_label。如果- end_label存在,则必须与相同- begin_label。
- end_label没有不能给予- begin_label。
- 同一嵌套级别的标签必须不同。
- 标签最多可包含16个字符。
要引用带标签的构造中的标签,请使用ITERATE或LEAVE语句。下面的示例使用这些语句继续迭代或终止循环:
CREATE PROCEDURE doiterate(p1 INT)BEGIN label1:LOOP SET p1 = p1 + 1;IF p1 < 10THEN ITERATE label1;END IF ;LEAVE label1;END LOOP label1;END ;
块标签的范围不包括在块内声明的处理程序的代码。有关详细信息,请参见“ DECLARE ... HANDLER语句”。
DECLARE声明
该DECLARE语句用于定义程序本地的各种项目:
DECLARE仅允许在BEGIN ... END复合语句内部使用,并且必须在复合语句的开始处以及其他任何语句之前。
声明必须遵循一定顺序。游标声明必须出现在处理程序声明之前。变量和条件声明必须出现在游标或处理程序声明之前。
