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