0.存储过程介绍:
CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])
- IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
- OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
- INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
1.声明变量:
数字整型的声明:
DECLARE v_ins_id INT;
字符串类型的声明:
DECLARE v_message VARCHAR(128) DEFAULT '';
时间类型的声明:
DECLARE v_player_time timestamp DEFAULT NULL;
为变量赋值:
SET v_ins_id=30;
2.判断:
(1) if elseif else end if ;
# 删除
drop procedure if exists p_jisuan_qi;
# 创建
create procedure p_jisuan_qi(in v_id int,out v_result VARCHAR(30))
begin
if (v_id > 0) then
select '大于0' into v_result ;
elseif (v_id = 0) then
select '等于0' into v_result ;
else
select '小于0' into v_result ;
end if;
end;
# 调用
call p_jisuan_qi(0,@h);
# 查询
select @h ;
(2) case 可以实现比if更为复杂的判断 :
CASE
WHEN age=20 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE;
如果 age 值为 20,count1 的值加 1,否则 count2 的值加 1。
3.循环
(1) LOOP 循环内容 END LOOP ; LOOP 只实现了一个简单的循环,并不进行条件判断。
add_num:LOOP
SET @count=@count+1;
END LOOP add_num;
该示例循环执行 count 加 1 的操作。因为没有跳出循环的语句,这个循环成了一个死循环。
(2)LEAVE 语句主要用于跳出循环控制。
add_num:LOOP
SET @count=@count+1;
IF @count=100 THEN
LEAVE add_num;
END LOOP add num;
循环执行 count 加 1 的操作。当 count 的值等于 100 时,跳出循环。
(3)ITERATE 是“再次循环”的意思,用来跳出本次循环,直接进入下一次循环。
add_num:LOOP
SET @count=@count+1;
IF @count=100 THEN
LEAVE add_num;
ELSE IF MOD(@count,3)=0 THEN
ITERATE add_num;
SELECT * FROM employee;
END LOOP add_num;
循环执行 count 加 1 的操作,count 值为 100 时结束循环。如果 count 的值能够整除 3,则跳出本次循环,不再执行下面的 SELECT 语句。
(4)WHILE 语句是当满足条件时,执行循环内的语句,否则退出循环。
WHILE @count<100 DO
SET @count=@count+1;
END WHILE;
循环执行 count 加 1 的操作,count 值小于 100 时执行循环。如果 count 值等于 100 了,则跳出循环。