mysql存储过程和存储函数练习题

课 序 授课日期 授课班次 授课教师 批准人
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
一、上机内容

  1. 输入以下代码,创建存储过程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(‘张青平’);
  2. 使用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;
二、实验思考

  1. 存储函数和存储过程如何将运算结果返回给外界?
    存储函数可以通过return语句返回函数值
    存储过程通过out inout 参数将结果带出
  2. 存储函数有OUT参数、INOUT参数吗? 没有
  3. 使用游标的步骤。
    定义游标
    打开游标
    提取数据
    关闭游标
  • 15
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱 coding 的遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值