mysql > SELECT 'Hello World' into @x; mysql > SELECT @x; +-------------+ | @x | +-------------+ | Hello World | +-------------+
mysql > SET @y='Goodbye Cruel World'; mysql > SELECT @y; ① 在MySQL客户端使用用户变量: +---------------------+ | @y | +---------------------+ | Goodbye Cruel World | +---------------------+ mysql > SET @z=1+2+3; mysql > SELECT @z; +------+ | @z | +------+ | 6 |
select name from mysql.proc where db='数据库名'; 或者 select routine_name from information_schema.routines where routine_schema='数据库名'; 或者 show procedure status where db='数据库名';
delimiter $$ create procedure if_demo(IN param INT) begin declare var int; set var = param + 1; if var = 0 then insert into t values(17); end if; if param = 0 then update t set s1 = s1 + 1; else update t set s1 = s1 + 2; end if; end$$ delimiter ;
② case语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
delimiter $$ create procedure case_demo(IN param INT) begin declare var int; set var = param + 1; case var when 0 then insert into t values(17); when 1 then insert into t values(18); else insert into t values(19); end case; end$$ delimiter ;
循环语句
① while … end while
语法:
1 2 3
while 条件 do --循环体; end while;
例如:
1 2 3 4 5 6 7 8 9 10 11
delimiter $$ create procedure while_demo(IN param INT) begin declare var int; set var = 0; while var < 6 do insert into t values(var); set var = var + 1; end while; end$$ delimiter ;
② repeat … end repeat
它在执行操作后检查结果,而 while 则是执行前进行检查
语法:
1 2 3 4
repeat --循环体; until 循环条件 end repeat;
例如:
1 2 3 4 5 6 7 8 9 10 11 12
delimiter $$ create procedure repeat_demo() begin declare v int; set v = 0; repeat insert into t values(v); set v = v + 1; until v >= 5 end repeat; end$$ delimiter ;
注: until后面是没有分号的
③ loop … end loop
loop 循环不需要初始条件,这点和 while 循环相似,同时和 repeat 循环一样不需要结束条件, leave 语句的意义是离开循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14
delimiter $$ create procedure loop_demo() begin declare v int; set v = 0; LOOP_LABEL: loop insert into t values(v); set v = v + 1; if v >= 5 then leave LOOP_LABEL; end if; end loop; end$$ delimiter ;
delimiter $$ create procedure iterate_demo() begin declare v int; set v = 0; LOOP_LABEL: loop if v = 3 then set v = v + 1; iterate LOOP_LABEL; end if; insert into t values(v); set v = v + 1; if v >= 5 then leave LOOP_LABEL; end if; end loop; end$$ delimiter ;