软件开发定制和存储函数
实验内容
- 软件开发定制输入以下代码,软件开发定制创建存储过程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的学生的姓名、课程名称、分数。
(2)调用存储过程stu_grade。 - 使用studentsdb数据库中的student_info表、curriculum表、grade表。
(1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。
(2)调用存储过程stu_name。
(3)删除存储过程stu_name。 - 使用studentsdb数据库中的grade表。
(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。
(2)执行存储过程stu_g_r,输入学号0002。
(3)显示0002号学生的选课门数。 - 使用studentsdb数据库中的curriculum表、grade表。
(1)创建一个存储函数num_func,统计指定课程名称的选课人数。
(2)执行存储函数num_func,查看“C语言程序设计”选课人数。 - 使用studentsdb数据库中的curriculum表、grade表。
(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。
(2)执行存储函数avg_func,查看“C语言程序设计”课程平均分。
(3)删除存储函数avg_func。
实验步骤及处理结果
粘贴SQL代码(小四号,宋体)及运行结果图
…
思考体会
参考资料
# 附 代码
#先要有个数据库CREATE DATABASE studentsdb;USE studentsdb;#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的学生的姓名、课程名称、分数。(2)调用存储过程stu_grade。*/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 @@DELIMITER ;CALL stu_grade();/*3. 使用studentsdb数据库中的student_info表、curriculum表、grade表。(1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。(2)调用存储过程stu_name。(3)删除存储过程stu_name。*/DELIMITER @@CREATE PROCEDURE stu_name(IN name CHAR(8))BEGIN SELECT `姓名`,MAX(g.分数) 最高分,MIN(g.分数) 最低分,AVG(g.分数) 平均分 FROM student_info s,curriculum c,grade g WHERE s.`学号`=g.`学号` AND c.`课程编号`=g.`课程编号` AND 姓名=name GROUP BY 姓名;END @@DELIMITER ;CALL stu_name('张青平');DROP PROCEDURE stu_name;/*4. 使用studentsdb数据库中的grade表。(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。(2)执行存储过程stu_g_r,输入学号0002。(3)显示0002号学生的选课门数。*/DELIMITER @@CREATE PROCEDURE stu_g_r(IN cno CHAR(4),OUT num INT)BEGIN SELECT count(*) INTO num FROM grade WHERE 学号=cno;end @@DELIMITER ;CALL stu_g_r('0002',@num);SELECT @num;/*5. 使用studentsdb数据库中的curriculum表、grade表。(1)创建一个存储函数num_func,统计指定课程名称的选课人数。(2)执行存储函数num_func,查看“C语言程序设计”选课人数。*/SET GLOBAL log_bin_trust_function_creators=1;DELIMITER @@CREATE FUNCTION num_func(cname VARCHAR(50))RETURNS INTBEGIN DECLARE num INT; SELECT COUNT(*) INTO num FROM grade g,curriculum c WHERE g.课程编号=c.课程编号 AND c.课程名称=cname; RETURN num;END @@DELIMITER ;SELECT num_func('C语言程序设计');/*6. 使用studentsdb数据库中的curriculum表、grade表。(1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。(2)执行存储函数avg_func,查看“C语言程序设计”课程平均分。(3)删除存储函数avg_func。*/DELIMITER @@CREATE FUNCTION avg_func(cname 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 课程名称 = cname; OPEN avg_cur; FETCH avg_cur INTO v_acg; CLOSE avg_cur; RETURN v_acg; END @@SELECT avg_func('C语言程序设计') 课程平均分;DROP FUNCTION avg_func;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88