第7次作业-存储过程和存储函数

这个作业属于哪个课程 https://edu.cnblogs.com/campus/uzz/cs3/
这个作业要求在哪里 https://edu.cnblogs.com/campus/uzz/cs3/homework/13095
这个作业的目标 <第7次作业-存储过程和存储函数>

(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 @@

(2)使用CALL命令执行存储过程stu_info,其参数值为'张青平'。

CALL stu_info('张青平');

二·使用studentsdb数据库中的student_info表、curriculum表、grade表。

(1)创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。

delimiter @@
CREATE PROCEDURE stu_grade()
BEGIN
SELECT 姓名,课程名称,分数 FROM student_info s,grade g,curriculum
WHERE s.学号=g.学号 AND s.学号='0001';
END @@

(2)调用存储过程stu_grade。

CALL stu_grade();

三·使用studentsdb数据库中的student_info表、curriculum表、grade表。

(1)创建存储过程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.`课程编号` AND 姓名=NAME GROUP BY 姓名;
	END @@

(2)调用存储过程stu_name。

	CALL stu_name('张青平');

(3)删除存储过程stu_name。

DROP PROCEDURE stu_name;

四·使用studentsdb数据库中的grade表。

(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。

	DELIMITER @@
CREATE PROCEDURE stu_g_r(
in 学号 char(4),
out 选修课程的门数 int 
)
BEGIN
  SELECT count(*) into 选修课程的门数 FROM grade ;
END @@

(2)执行存储过程stu_g_r,输入学号0002。

CALL stu_g_r('0002',@选修课程的门数);

(3)显示0002号学生的选课门数。

SELECT @选修课程的门数;

五·使用studentsdb数据库中的curriculum表、grade表。

(1)创建一个存储函数num_func,统计指定课程名称的选课人数。

SET GLOBAL log_bin_trust_function_creators=1;
delimiter @@
CREATE FUNCTION NUM_FUNC(canme VARCHAR(50))
RETURNS INT
BEGIN
	DECLARE num INT;
	SELECT COUNT(*) INTO num FROM grade g,curriculum c
	WHERE g.课程编号=c.课程编号=cname;
	RETURN num;
END @@

(2)执行存储函数num_func,查看“C语言程序设计”选课人数。


DELIMITER ;
SELECT num_func ('C语言程序设计') AS 选课人数;

六·使用studentsdb数据库中的curriculum表、grade表。

(1)创建一个存储函数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 @@

(2)执行存储函数avg_func,查看“C语言程序设计”课程平均分。

SELECT avg_func('C语言程序设计') AS 课程平均分;

(3)删除存储函数avg_func。

DROP FUNCTION avg_func;

实验思考

1.存储函数和存储过程如何将运算结果返回给外界?

a.RETURN 语句
b.OUT参数
c.游标

2.存储函数有OUT参数、INOUT参数吗?

没有,存储函数只能返回函数结果,返回时可以使用return语句进行

3.使用游标的步骤

共需4步,分别是:
1.声明游标
2.打开游标
3.提取数据
4.关闭游标

posted @   唯义  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示