【1】IF ….THEN….ELSE….END IF
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_user_count`(in sex_id INT,OUT user_count INT)
BEGIN
#if ...else
IF sex_id = 0 THEN
SELECT COUNT(*) FROM p_user WHERE p_user.sex="女" into user_count;
ELSE
SELECT COUNT(*) FROM p_user WHERE p_user.sex="男" INTO user_count;
END IF;
END
【2】CASE …WHEN THEN…ELSE…END CASE
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc2`(in param int)
begin
DECLARE s int ;
-- CASE ...WHEN THEN...ELSE...END CASE
set s = param+1;
CASE s mod 2
when 0 THEN
select CONCAT(param,' is 奇数');
ELSE
select CONCAT(param,' is 偶数');
end CASE;
end
【3】WHILE …DO…END WHILE
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc3`()
begin
declare var int;
-- WHILE ...DO...END WHILE...
set var=0;
while var<6 do
insert into t_user(age) value(var);
set var=var+1;
end while;
end
【4】repeat …end repeat
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc4`()
begin
-- repeat ...end repeat
declare v int;
set v=0;
repeat
insert into t_user(age) values(v);
set v=v+1;
until v>=5
end repeat;
end
【5】LOOP_LABLE:loop ….leave LOOP_LABLE…..end loop
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc6`()
begin
-- LOOP_LABLE:loop ....leave LOOP_LABLE.....end loop;
declare v int;
set v=7;
LOOP_LABLE:loop
insert into t_user(age) values(v);
set v=v+1;
if v >=20 then
leave LOOP_LABLE;
end if;
end loop;
end
【6】LOOP_LABLE:loop…ITERATE LOOP_LABLE;…leave LOOP_LABLE;….end loop
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc5`()
begin
-- LOOP_LABLE:loop...ITERATE LOOP_LABLE;...leave LOOP_LABLE;....end loop;
declare v int;
set v=0;
LOOP_LABLE:loop
if v=3 then
set v=v+1;
ITERATE LOOP_LABLE;
end if;
insert into t_user(age) values(v);
set v=v+1;
if v>=5 then
leave LOOP_LABLE;
end if;
end loop;
end
详细解释请参看:Mysql存储过程详解