1. 删除存储过程
    1. drop procedure if exists stu_test;
    1. 创建存储过程
    1. -- 创建存储过程
    2. DELIMITER $ --声明存储过程的结束符
    3. CREATE PROCEDURE stu_test() --存储过程名称(参数列表)
    4. BEGIN --开始
    5. -- 可以写多个sql语句 -- sql语句+流程控制
    6. END $ --结束 结束符
    7. -- 执行存储过程
    8. call stu_test() --call 存储过程名称(参数)
    9. 参数:
    10. IN: 表示输入参数,可以携带数据带存储过程中
    11. OUT: 表示输出参数,可以从存储过程中返回结果
    12. INOUT: 表示输入输出参数,两者结合
    1. 存储过程传入参数
    1. -- 存储过程
    2. -- 1、需求:传入一个学生ID,查询该学生的信息
    3. -- 带有输入参数的存储过程
    4. delimiter $
    5. create PROCEDURE stu_findByid(in sid int)
    6. begin
    7. select * from student where id=sid;
    8. END $
    9. -- 调用存储过程
    10. call stu_findByid(1);
    1. 带有输出参数的存储过程
    1. delimiter $
    2. create procedure stu_out(out str varchar(20))
    3. begin
    4. -- 给参数赋值
    5. set str='这是一个输出参数';
    6. end $
    7. -- 删除存储过程
    8. drop procedure stu_inout;
    9. -- 调用存储过程
    10. -- 1)定义了一个变量
    11. -- 2)定义了一个会话变量接收存储过程输出的参数
    12. call stu_out(@name);
    13. select @name;
    14. -- 3、输入输出参数的存储过程
    15. delimiter $
    16. create procedure stu_inout(inout n int)
    17. begin
    18. select n;
    19. set n=500;
    20. end $
    21. set @n=10;
    22. call stu_inout(@n);
    23. select @n;
    1. 带条件判断的存储过程
      — 需求:输入一个正整数,如果1,返回“星期一”,如果2,返回“星期二。。。。其他返回输入错误”
      1. delimiter $
      2. create procedure stu_testIf(in num int,out str varchar(20))
      3. begin
      4. if num=1 then -- 开始
      5. set str='星期一';
      6. elseif num=2 then
      7. set str='星期二';
      8. elseif num=3 then
      9. set str='星期三';
      10. else
      11. set str='输入错误';
      12. end if; -- 结束
      13. end $
      14. -- 执行存储过程
      15. call stu_testIf(2,@str);
      16. select @str;
    1. 带循环功能的存储过程
    1. -- 输入一个整数,求和。比如输入100,统计1-100的和
    2. delimiter $
    3. create procedure stu_testWhile(in num int,out result int)
    4. begin
    5. -- 定义两个局部变量
    6. DECLARE i int default 1;
    7. declare vsum int default 0;
    8. while i<=num do
    9. set vsum = vsum+i;
    10. set i = i+1;
    11. end while;
    12. set result = vsum;
    13. END $
    14. call stu_testWhile(100,@result);
    15. select @result;
    16. drop procedure stu_testWhile;
    1. 使用查询的结果赋值给变量(into)
      1. delimiter $
      2. create procedure stu_findByid2(in eid int,out vname varchar(20))
      3. begin
      4. select name into vname from student where id=eid;
      5. end
      6. call stu_findByid2(1,@vname);
      7. select @vname;
      8. -- 7、练习,编写一个存储过程
      9. use students;
      10. select * from user;
      11. -- 如果学生的英语平均分小于等于70分,刚输出‘一般’
      12. -- 如果学生的英语平均分大于70,且小于等于90分,刚输出‘良好’
      13. -- 如果学生的英语平均分大于90分,刚输出‘优秀’
      14. delimiter $
      15. create procedure stu_testAvg(out str varchar(20))
      16. begin
      17. -- 计算英语平均分
      18. declare savg double;
      19. select avg(score) into savg from user;
      20. if savg<=70 then
      21. set str='一般';
      22. elseif savg>70 and savg<=90 then
      23. set str='良好';
      24. else
      25. set str='优秀';
      26. end if;
      27. end $
      28. call stu_testAvg(@str);
      29. select @str;