mysql采用前面实验所创建的数据库S_C及其上所建立的STUDENT、COURSE和SC表和数据(必要时可补充数据),根据如下要求,编写程序并运行和查看结果。1、创建并运行一个存储过程,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在 60 分以上,显示"成绩合格,成绩为 xx 分",否则显示"成绩不合格,成绩为 xx 分" 。给我两种方法
时间: 2023-06-14 11:06:29 浏览: 110
方法一:使用存储过程实现
首先,我们需要创建一个存储过程,输入学生学号,计算该学生所选课程的平均成绩,并根据平均成绩显示提示信息。
下面是实现该功能的存储过程代码:
```mysql
DELIMITER $$
CREATE PROCEDURE `get_student_avg_score`(IN `stu_id` INT)
BEGIN
DECLARE avg_score FLOAT;
SELECT AVG(score) INTO avg_score FROM SC WHERE Sno = stu_id;
IF avg_score >= 60 THEN
SELECT CONCAT('成绩合格,成绩为 ', FORMAT(avg_score, 2), ' 分') AS result;
ELSE
SELECT CONCAT('成绩不合格,成绩为 ', FORMAT(avg_score, 2), ' 分') AS result;
END IF;
END$$
DELIMITER ;
```
然后,我们可以调用该存储过程并输入学生学号来测试该功能。例如,输入学号为 1001 的学生的平均成绩:
```mysql
CALL get_student_avg_score(1001);
```
方法二:使用函数实现
除了使用存储过程,我们还可以使用函数来实现同样的功能。下面是实现该功能的函数代码:
```mysql
DELIMITER $$
CREATE FUNCTION `get_student_avg_score_func`(stu_id INT) RETURNS VARCHAR(100)
BEGIN
DECLARE avg_score FLOAT;
SELECT AVG(score) INTO avg_score FROM SC WHERE Sno = stu_id;
IF avg_score >= 60 THEN
RETURN CONCAT('成绩合格,成绩为 ', FORMAT(avg_score, 2), ' 分');
ELSE
RETURN CONCAT('成绩不合格,成绩为 ', FORMAT(avg_score, 2), ' 分');
END IF;
END$$
DELIMITER ;
```
调用该函数的方法与调用存储过程类似,例如,输入学号为 1001 的学生的平均成绩:
```mysql
SELECT get_student_avg_score_func(1001);
```
阅读全文