循环
(1)GOTO
语法
<<lbl_goto>>
spl_code;
if expr then
goto lbl_goto;
end if;
示例
create procedure up_test_goto()
define i int;
let i = 0;
begin
<<loop_label>>
begin
let i = i + 1;
end;
if i < 10 then
insert into t_user values(i, concat('user_loop', to_char(i)));
goto loop_label;
end if;
end;
end procedure;
(2)LOOP
语法
loop
if expr then
exit;
end if;
end loop;
或
loop
exit when expr;
end loop;
示例1
create procedure up_test_loop1()
define i int;
let i = 1;
loop
if i > 10 then
exit;
else
insert into t_user values(i, concat('user_loop1_', to_char(i)));
end if;
let i = i + 1;
end loop;
end procedure;
示例2
create procedure up_test_loop2()
define i int;
let i = 1;
loop
exit when i > 10;
insert into t_user values(i, concat('user_loop2_', to_char(i)));
let i = i + 1;
end loop;
end procedure;
(3)FOR/FOREACH
语法
for i in (start_val to end_val) loop
spl_code;
end loop;
或
for i in (start_val to end_val)
spl_code;
end for;
或
foreach select col1, col2,... into var1, var2,... from table_name
spl_code;
end foreach;
示例1
create procedure up_test_for1()
define i int;
for i in (1 to 10) loop
insert into t_user values(i, concat('user_for1_', to_char(i)));
end loop;
end procedure;
示例2
create procedure up_test_for2()
define i int;
for i in (1 to 10)
insert into t_user values(i, concat('user_for2_', to_char(i)));
end for;
end procedure;
示例3
create procedure up_test_foreach()
define userid int;
define username varchar(20);
foreach select f_userid, f_username into userid, username from t_user
if mod(userid, 2) == 0 then
insert into t_user2 values(userid, username);
end if;
end foreach;
end procedure;
(4)WHILE
语法
while expr loop
spl_code;
end loop;
或
while expr
spl_code;
end while;
示例1
create procedure up_test_while1()
define i int;
let i = 1;
while i < 10 loop
insert into t_user values(i, concat('user_while1_', to_char(i)));
let i = i + 1;
end loop;
end procedure;
示例2
create procedure up_test_while2()
define i int;
let i = 1;
while i < 10
insert into t_user values(i, concat('user_while2_', to_char(i)));
let i = i + 1;
end while;
end procedure;