如何保存存储过程到数据库中: 只要把它当成sql脚本执行就行
call : 调用存储过程
mysql> CALL ShowStuScore(); 调用 ShowStuScore()
declare : 关键字来定义变量
default :定义变量设置默认值
DECLARE teacher_num int default 10 定义变量 teacher_name,数据类型为 INT 类型,默认值为 10
set: 来为变量赋值
set teacher_name =30 变量 teacher_name 赋值为 30
select into :查询出来在写入赋值
SELECT id INTO my_sql FROM tb_student WEHRE id=2; 从 tb_student 表中查询 id 为 2 的记录,将该记录的 id 值赋给变量 my_sql。
if elseif else end if : 判断
IF age>20 THEN SET @count1=@count1+1;
ELSEIF age=20 THEN @count2=@count2+1;
ELSE @count3=@count3+1;
END lF;
根据 age 与 20 的大小关系来执行不同的 SET 语句。如果 age 值大于20,那么将 count1 的值加 1;如果 age 值等于 20,那么将 count2 的值加 1;其他情况将 count3 的值加 1。IF 语句都需要使用 END IF 来结束。
case : 可以实现比if更为复杂的判断
CASE age
WHEN 20 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE; 如果 age 值为 20,count1 的值加 1,否则 count2 的值加 1。
循环:
LOOP : 简单循环 LOOP 循环内容 END LOOP
LEAVE :跳出循环 leave
LOOP 语句本身没有停止循环的语句,必须使用 LEAVE 语句等才能停止循环,跳出循环过程。
add_num:LOOP
SET @count=@count+1;
IF @count=100 THEN
LEAVE add_num;
END LOOP add num;
循环执行 count 加 1 的操作。当 count 的值等于 100 时,跳出循环。
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 语句
REPEAT: REPEAT UNTIL的条件为真时才跳出循环
REPEAT
SET @count=@count+1;
UNTIL @count=100
END REPEAT ; 循环执行 count 加 1 的操作,count 值为 100 时结束循环
while DO end while : WHILE 语句是当满足条件时,执行循环内的语句,否则退出循环。
WHILE @count<100 DO
SET @count=@count+1;
END WHILE;
循环执行 count 加 1 的操作,count 值小于 100 时执行循环。如果 count 值等于 100 了,则跳出循环。
验证方案:
1+2+....+100 =5050
drop procedure if exists pro; #删除已经存在的脚本
create procedure pro(in i int ) #in传入值 out输出值
begin # 开始
declare num int default 0; #设置局部变量
declare sum int default 0 ;
aa:loop #开始循环
set sum = num + sum ;
set num = num+1 ; #通过set命令给变量赋值
case num
when 50 then select sum as "和" from dual; #case when使用
when 99 then select sum as "和" from dual ; #下面会出现三个弹框
ELSE BEGIN END; #这个不要忘了 不然会出现 [1339]Case not found for CASE statement
end case;
if num > i then #当循环大于100时跳出循环
leave aa ; #跳出循环
end if;
end loop; #结束循环
select sum from dual ; #查询出结果
end;
#下面开始调用
call pro(100) ;