第7次作业-存储过程和存储函数
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/uzz/cs3 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/uzz/cs3/homework/13095 |
这个作业的目标 | 存储过程和存储函数 |
一.操作题
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 @@
CREATE PROCEDURE stu_info(IN name CHAR(8))
BEGIN
SELECT s.学号,姓名,课程编号,分数 FROM student_info s,grade g
WHERE s.学号=g.学号 and 姓名=name;
END @@
DELIMITER ;
CALL stu_info('张青平');
2使用studentsdb数据库中的student_info表、curriculum表、grade表。
¥(1)创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。
DELIMITER @@
CREATE PROCEDURE stu_grade ()
BEGIN
SELECT 姓名,课程名称,分数 FROM student_info s,curriculum c,grade g
WHERE s.学号=g.学号 AND c.课程编号=g.课程编号 AND s.学号='0001';
END @@
¥(2)调用存储过程stu_grade。
DELMITER ;
CALL stu_grade();
3使用studentsdb数据库中的student_info表、curriculum表、grade表。
¥(1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。
DELIMITER @@
CREATE PROCEDURE stu_name(IN NAME CHAR(8))
BEGIN
SELECT 姓名,MAX(g.分数) AS 最高分,MIN(g.分数) AS 最低分,AVG(g.分数) AS 平均分
FROM student_info s,curriculum c,grade g
WHERE s.学号=g.学号 AND c.课程编号=g.课程编号 AND 姓名=name
GROUP BY 姓名;
END @@
¥(2)调用存储过程stu_name。
DELIMITER ;
CALL stu_name('马晓夏');
¥(3)删除存储过程stu_name。
DROP PROCEDURE stu_name;
4使用studentsdb数据库中的grade表。
¥(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。
DELIMITER @@
CREATE PROCEDURE stu_g_r(IN xh char(4),OUT ms INT)
BEGIN
SELECT COUNT(*) INTO ms FROM grade
WHERE 学号=xh;
END @@
¥(2)执行存储过程stu_g_r,输入学号0002。
DELIMITER ;
CALL stu_g_r('0002',@ms);
¥(3)显示0002号学生的选课门数。
SELECT @ms;
5使用studentsdb数据库中的curriculum表、grade表。
¥(1)创建一个存储函数num_func,统计指定课程名称的选课人数。
SET GLOBAL log_bin_trust_function_creators=1;
DELIMITER @@
CREATE FUNCTION num_func(kcmc VARCHAR(50))
RETURNS INT
BEGIN
DECLARE num INT;
SELECT COUNT(*) INTO num FROM grade g,curriculum c
WHERE g.课程编号=c.课程编号 AND c.课程名称=kcmc;
RETURN num;
END @@
¥(2)执行存储函数num_func,查看“C语言程序设计”选课人数。
DELIMITER ;
SELECT num_func('C语言程序设计') AS 选课人数;
6使用studentsdb数据库中的curriculum表、grade表。
¥(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。
DELIMITER @@
CREATE FUNCTION avg_func(kcmc VARCHAR(50))
RETURNS DECIMAL
BEGIN
DECLARE v_acg DECIMAL;
DECLARE avg_cur CURSOR FOR SELECT avg(分数) FROM grade g, curriculum c
WHERE g.课程编号 = c.课程编号 AND 课程名称=kcmc;
OPEN avg_cur;
FETCH avg_cur INTO v_acg;
CLOSE avg_cur;
RETURN v_acg;
END @@
¥(2)执行存储函数avg_func,查看“C语言程序设计”课程平均分。
SELECT avg_func('C语言程序设计') AS 课程平均分;
¥(3)删除存储函数avg_func。
DROP FUNCTION avg_func;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)