课 序 授课日期 授课班次 授课教师 批准人
5
课题 实验五 存储过程和存储函数
目的要求 1. 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。
2. 掌握使用SQL语句CALL调用存储过程的方法。
3. 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。
4. 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。
5. 掌握使用CREATE FUNCTION创建存储函数的方法。
6. 掌握使用SQL语句ALTER FUNCTION修改存储函数的方法。
7. 掌握使用SQL语句DROP FUNCTION删除存储函数的方法。
教学内容 1.存储过程的创建、修改、删除及调用SQL语句。
2.存储函数的创建、修改、删除及执行SQL语句。
重点难点 存储过程和存储函数的创建、修改、删除及使用命令。
带参数的存储过程的创建及调用。
教学方法
手 段 教学方法:实验教学法
手 段:机器演示
教学步骤 1.内容讲解
2.上机练习
3.针对问题进一步讲解
复 习
提 问 题
作业题目 完成实验指导书中要求的上机作业
预习内容
课时分配(以分钟计算)
教学环节 复习提问 新课讲解 课堂实践 每课小结 布置作业
时间分配 30 70
一、上机内容
- 输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名的学生的各科成绩。
DELIMITER @@
CREATE PROCEDURE stu_info(IN name CHAR(8))
BEGIN
SELECT s.学号,姓名,课程编号,分数 FROM student_info s,grade g
WHERE s.学号=g.学号 and 姓名=name;
END @@
使用CALL命令执行存储过程stu_info,其参数值为’张青平’。
DELIMITER ;
CALL stu_info(‘张青平’); - 使用studentsdb数据库中的student_info表、curriculum表、grade表。
(1)创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。
Create procedure stu_grade(in sid varchar(10))
Begin
Select s_name,c_name,c_score from student_info s,curriculum c,grade g where s.s_name=c.s_name and c.c_id=g.c_id and s.s_id=sid;
end@@
(2)调用存储过程stu_grade。
Call stu_grade(‘0001’);
3. 使用studentsdb数据库中的student_info表、curriculum表、grade表。
(1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。
Create procedure stu_name(in sname varchara(20))
Begin
Select max(g_score) 最高分,min(g_score) 最低分,avg(g_score)平均分 from grade where s_id=(select s_id from student_info where s_name=sname);
end@@
(3)调用存储过程stu_name。
Call stu_name(‘张三’);
(4)删除存储过程stu_name。
Drop procedure stu_name;
4. 使用studentsdb数据库中的grade表。
(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。
Create procedure stu_g_r(in sid varchar(10),out num int)
Begin
Set out=(Select count() from grade where s_id=sid);
end@@
(2)执行存储过程stu_g_r,输入学号0002。
Call stu_g_r(‘0002’,@out);
(3)显示0002号学生的选课门数。
Select out;
5. 使用studentsdb数据库中的curriculum表、grade表。
(1)创建一个存储函数num_func,统计指定课程名称的选课人数。
Create procedure num_func(in cname varchar(20))
Begin
Select count()from grade where c_id=(select c_id from curriculum where c_name=cname);
end@@
(2)执行存储函数num_func,查看“C语言程序设计”选课人数。
Call num_func(‘C语言程序设计);
6. 使用studentsdb数据库中的curriculum表、grade表。
(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。
Create procedure avg_func(in cname)
Begin
Declare sum int;
Declare temp int;
Declare count int;
Declare mycursor cursor for select g_score from grade;
Ser sum=0;set temp=0;set count=0;
Open mycursor;
Fetch mycursor into temp;
While (temp is not null ) do
Set sum=sum+temp;
Count=count+1;
Fetch mycursor into temp;
End while;
Select sum/count;
end@@
(3)执行存储函数avg_func,查看“C语言程序设计”课程平均分。
Call avg_func(‘C语言程序设计‘);
(4)删除存储函数avg_func。
Drop procedure avg_func;
二、实验思考
- 存储函数和存储过程如何将运算结果返回给外界?
存储函数可以通过return语句返回函数值
存储过程通过out inout 参数将结果带出 - 存储函数有OUT参数、INOUT参数吗? 没有
- 使用游标的步骤。
定义游标
打开游标
提取数据
关闭游标