1,while…do…end while
/* while循环语法:
while 条件 DO
循环体;
end while;
*/
-- 实例:
create procedure sum1(a int)
begin
declare sum int default 0; -- default 是指定该变量的默认值
declare i int default 1;
while i<=a DO -- 循环开始
set sum=sum+i;
set i=i+1;
end while; -- 循环结束
select sum; -- 输出结果
end
-- 执行存储过程
call sum1(100);
-- 删除存储过程
drop procedure if exists sum1
-- 实例2
DROP PROCEDURE IF EXISTS mywhile;
CREATE PROCEDURE mywhile ()
BEGIN
DECLARE i INT default 0;
outer_label: BEGIN #设置一个标记并设置开始
while i<10 DO
SET i = i + 1;
IF i > 2 THEN
select '跳出循环' column1;
LEAVE outer_label; #满足条件,终止循环,跳转到end outer_label标记
ELSE
SELECT i as column1;
END IF;
end while;
END outer_label; #设置标记并结束
END
call mywhile;
2,loop…leave…end loop
/*loop 循环语法:
loop_name:loop
if 条件 THEN -- 满足条件时离开循环
leave loop_name; -- 和 break 差不多都是结束训话
end if;
end loop;
*/
-- 实例:
create procedure sum2(a int)
begin
declare sum int default 0;
declare i int default 1;
loop_name:loop -- 循环开始
if i>a then
leave loop_name; -- 判断条件成立则结束循环 好比java中的 boeak
end if;
set sum=sum+i;
set i=i+1;
end loop; -- 循环结束
select sum; -- 输出结果
end
-- 执行存储过程
call sum2(100);
-- 删除存储过程
drop procedure if exists sum2
-- 实例2
DECLARE num INT;
DECLARE str VARCHAR(255);
SET num =1;
SET my_string = '';
loop_label: LOOP
IF num <10THEN
LEAVE loop_label;-- 相当于java中的break
ENDIF;
SET num = num +1;
IF(num mod3)THEN
ITERATE loop_label; -- iterate相当于java中continue
ELSE
SET my_string =CONCAT(my_string,num,',');
ENDIF;
END LOOP;
3,repeat…until…end repeat
/*repeat 循环语法
repeat
循环体
until 条件 end repeat;
*/
-- 实例;
create procedure sum3(a int)
begin
declare sum int default 0;
declare i int default 1;
repeat -- 循环开始
set sum=sum+i;
set i=i+1;
until i>a end repeat; -- 循环结束
select sum; -- 输出结果
end
-- 执行存储过程
call sum3(100);
-- 删除存储过程
drop procedure if exists sum3
在MySQL存储过程,需要循环结构 有个名称 ,其他都是一样的.
mysql中没有for…in…循环