1.标签语句
[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]
标签label可以加在begin...end语句以及loop,repeat和while语句上
语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置,leave表示跳出标签
实例:
mysql> delimiter //
mysql> create procedure doiterate(in p1 int,out p2 int)
-> begin
-> label1:loop
-> set p1 = p1 + 1;
-> if p1 < 10 then iterate label1;end if;
-> leave label1;
-> end loop label1;
-> set p2=p1;
-> end//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call doiterate(1,@a);
Query OK, 0 rows affected (0.00 sec)
mysql> select @a;
+------+
| @a |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
mysql> call doiterate(5,@a);
Query OK, 0 rows affected (0.00 sec)
mysql> select @a;
+------+
| @a |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
2.Declare语句
语法:
DECLARE var_name [, var_name] ... type [DEFAULT value]
Declare语句通常声明本地变量、游标、条件或者handler
Declare语句只允许出现在begin...end语句中而且必须出现在第一行
Declare的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和handler
使用default指定变量的默认值,如果没有指定默认值则为NULL
声明的变量和被引用的数据表中的字段要区分开
存储过程中的变量
本地变量可以通过declare语句声明
声明后的变量可以通过select...into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch...into var_list赋值
mysql> delimiter //
mysql> create procedure sp1(v_sid int)
-> begin
-> declare xname varchar(64) default 'bob';
-> declare xgender int;
-> select sname,gender into xname,xgender from students where sid=v_sid;
-> select xname,xgender;
-> end//
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql>
mysql> call sp1(1);
+--------+---------+
| xname | xgender |
+--------+---------+
| Andrew | 1 |