创建存储过程,根据用户提供的学号查询该同学所有选修课程的平均分
时间: 2024-02-18 13:04:23 浏览: 31
下面是一个根据学号查询该同学所有选修课程的平均分的存储过程的例子:
```sql
CREATE PROCEDURE get_avg_score(IN student_id INT, OUT avg_score FLOAT)
BEGIN
SELECT AVG(score) INTO avg_score
FROM sc
WHERE sid = student_id;
END;
```
这个存储过程接受一个输入参数 `student_id`,表示要查询的学生的学号。存储过程中使用 `SELECT AVG(score)` 语句查询该学生在 `sc` 表中的所有选修课程的平均分,并将结果存储到 `avg_score` 输出参数中。
使用该存储过程的示例代码:
```sql
SET @student_id = 12345;
CALL get_avg_score(@student_id, @avg_score);
SELECT @avg_score;
```
这段代码首先设置变量 `@student_id` 的值为学生的学号,然后调用存储过程 `get_avg_score`,将该学生的学号作为输入参数,将平均分存储到变量 `@avg_score` 中。最后,使用 `SELECT @avg_score` 显示平均分。
相关问题
opengauss创建一存储过程,根据学生学号,查询该学生所有选修课的成绩
好的,下面是一个示例存储过程,它可以根据学生学号查询该学生所有选修课的成绩:
```
CREATE OR REPLACE PROCEDURE get_student_scores(student_id INTEGER)
AS $$
DECLARE
course_id INTEGER;
course_name VARCHAR(100);
score INTEGER;
BEGIN
FOR course_id, course_name, score IN
SELECT c.id, c.name, s.score
FROM courses c
JOIN student_courses s ON c.id = s.course_id
WHERE s.student_id = student_id
LOOP
RAISE NOTICE 'Course % (%): %', course_name, course_id, score;
END LOOP;
END;
$$ LANGUAGE plpgsql;
```
在上面的示例中,我们创建了一个名为`get_student_scores`的存储过程,它接受一个学生学号作为参数。存储过程会查询`student_courses`表,找到所有该学生选修的课程,然后输出每门课程的名称、课程号和成绩。
要执行这个存储过程,只需要调用它的名称并传入学生学号:
```
CALL get_student_scores(123);
```
其中`123`是学生的学号。执行结果会在控制台中输出。如果你想将结果保存到文件或者其他地方,可以在存储过程中添加相关的逻辑。
创建一存储过程:根据学生学号查询学生所选修的课程及其成绩,学号作为参数输入。
好的,以下是根据学生学号查询学生所选修的课程及其成绩的存储过程代码:
```
CREATE PROCEDURE getStudentCourses (
IN studentId INT
)
BEGIN
SELECT course_name, score
FROM student_courses
WHERE student_id = studentId;
END;
```
这个存储过程接收一个参数 `studentId`,然后从 `student_courses` 表中查询学号为 `studentId` 的学生所选修的课程及其成绩。你可以通过调用这个存储过程并传入学生的学号来获取结果。