参考https://www.cnblogs.com/l5580/p/5993238.html
一、创建存储过程
create procedure procedure_name(参数) -- 如果存储过程需要接受参数,可以在()中列举出来。即使没有参数后面仍然要跟()。BEGIN和END语句用来限定存储过程体,过程体本身是个简单的SELECT语句这里可以输入多个参数,每个参数以逗号分隔。
begin
sql; --注意:写完sql后需要写分号 ,不然会报错
end
例子:
已知数据a中存在课程表和成绩表
创建一个存储过程,根据输入的学号(s_id)及课程名称(c_name),查询某个学生某门课程的成绩
CREATE PROCEDURE getStudentCore(IN sno VARCHAR(20),IN cName VARCHAR(20),OUT sScore INT)
BEGIN
select score.s_score
INTO sScore
from course LEFT JOIN score
on course.c_id=score.c_id
where score.s_id=sno AND course.c_name=cName;
END
其中
关键字OUT指出相应的参数用来从存储过程传给一个值(返回给调用者)。MySQL支持IN(传递给存储过程)、OUT(从存储过程中传出、如这里所用)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGIN和END语句内,如前所见,它们是一些列SELECT语句,用来检索值,然后保存到相应的变量(通过INTO关键字)
二、执行存储过程
call procedure_name(对应存储过程的参数...) // MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL
例子
查看学号为03,课程名为yumen的成绩。
CALL getStudentCore('03','yuwen',@c); --这里执行存储过程后不会输出结果,所以还需要select 变量,查看得到的变量值。
目前存在问题,若课程名称输入的是中文,如'数学',则无法正确查看到该课程成绩,结果都是NULL,待排查
SELECT @c
三、删除存储过程
drop procedure procedure_name
如 drop PROCEDURE getStudentCore //删除存储过程
查看数据库中存储过程的创建情况
show PROCEDURE status;