在学生课程数据库中,编写一个存储过程,完成 统计计算机系学生的平均年龄
时间: 2024-03-18 21:41:51 浏览: 16
好的,下面是一个统计计算机系学生平均年龄的Oracle存储过程:
```sql
CREATE OR REPLACE PROCEDURE CALCULATE_CS_AVG_AGE(avg_age OUT NUMBER)
IS
total_age NUMBER := 0;
num_students NUMBER := 0;
avg_age_temp NUMBER := 0;
BEGIN
-- 遍历所有计算机系学生,计算总年龄和学生数量
FOR student IN (SELECT * FROM students WHERE major = '计算机系') LOOP
total_age := total_age + student.age;
num_students := num_students + 1;
END LOOP;
-- 计算平均年龄
avg_age_temp := total_age / num_students;
-- 将平均年龄存入输出参数
avg_age := ROUND(avg_age_temp, 2);
END;
/
```
在这个存储过程中,我们使用了与上一个存储过程类似的方法,首先使用 FOR 循环遍历所有计算机系学生,计算出总年龄和学生数量。然后,我们使用这些数据计算出平均年龄,并将其存入输出参数中。
相关问题
在学生课程数据库中完成: 编写一个存储过程,计算每个成绩的绩点。
好的,以下是一个可能的练习题,希望能够帮助你巩固Oracle存储过程的知识。
题目要求:
在一个学生课程数据库中,有一个名为SC(学生-课程)的表格,其中每条记录包含三个字段:学生ID、课程ID和成绩。现在需要你编写一个存储过程,用于计算每个成绩的绩点。
要求实现的存储过程应该满足以下条件:
1. 存储过程的名称为calculate_GPA。
2. 存储过程应该能够计算出SC表格中每个成绩的绩点,并将其存储在一个名为GPA的新表格中。
3. GPA表格应该包含四个字段:课程ID、成绩、绩点和排名。其中排名字段表示该成绩在所有成绩中的排名。
4. 存储过程应该返回成功计算出绩点的记录数目。
参考答案:
下面是一个可能的参考答案,仅供参考。请注意,实际的存储过程实现可能会因为具体的数据库结构和要求而有所不同。
```
CREATE OR REPLACE PROCEDURE calculate_GPA(p_calculated_count OUT NUMBER) AS
BEGIN
CREATE TABLE GPA AS
SELECT course_id, score,
CASE
WHEN score >= 90 THEN 4.0
WHEN score >= 85 THEN 3.7
WHEN score >= 82 THEN 3.3
WHEN score >= 78 THEN 3.0
WHEN score >= 75 THEN 2.7
WHEN score >= 72 THEN 2.3
WHEN score >= 68 THEN 2.0
WHEN score >= 64 THEN 1.5
WHEN score >= 60 THEN 1.0
ELSE 0.0
END AS point,
RANK() OVER (ORDER BY score DESC) AS rank
FROM SC;
p_calculated_count := SQL%ROWCOUNT;
END;
```
在这个存储过程中,我们首先使用CREATE TABLE语句创建一个名为GPA的新表格,其中包含课程ID、成绩、绩点和排名四个字段。然后,我们使用CASE语句计算出每个成绩的绩点,并将其存储在point字段中。最后,我们使用RANK() OVER函数计算出每个成绩在所有成绩中的排名,并将其存储在rank字段中。
你可以使用以下代码来调用这个存储过程,并查看返回结果:
```
DECLARE
calculated_count NUMBER;
BEGIN
calculate_GPA(calculated_count);
DBMS_OUTPUT.PUT_LINE('Calculated GPA for ' || calculated_count || ' records.');
END;
```
在这个例子中,我们调用存储过程calculate_GPA,并将返回的记录数存储在变量calculated_count中。最后,我们使用DBMS_OUTPUT.PUT_LINE函数将结果输出到控制台。
在学生课程数据库中完成: 编写一个存储过程,修改给定学号、课程号的学生成绩。
好的,以下是一个可能的练习题,希望能够帮助你巩固Oracle存储过程的知识。
题目要求:
在一个学生课程数据库中,有一个名为SC(学生-课程)的表格,其中每条记录包含三个字段:学生ID、课程ID和成绩。现在需要你编写一个存储过程,用于修改给定学号、课程号的学生成绩。
要求实现的存储过程应该满足以下条件:
1. 存储过程的名称为update_score,其中学生ID、课程ID和新的成绩作为输入参数。
2. 存储过程应该能够找到SC表格中指定学生、指定课程的记录,并将其成绩更新为新的成绩。
3. 存储过程应该返回成功更新的记录数目。
参考答案:
下面是一个可能的参考答案,仅供参考。请注意,实际的存储过程实现可能会因为具体的数据库结构和要求而有所不同。
```
CREATE OR REPLACE PROCEDURE update_score(p_student_id IN NUMBER, p_course_id IN NUMBER, p_new_score IN NUMBER, p_updated_count OUT NUMBER) AS
BEGIN
UPDATE SC SET score = p_new_score WHERE student_id = p_student_id AND course_id = p_course_id;
p_updated_count := SQL%ROWCOUNT;
END;
```
在这个存储过程中,我们首先使用UPDATE语句更新SC表格中指定学生、指定课程的记录,并将其成绩更新为新的成绩。然后,我们使用SQL%ROWCOUNT内置变量来获取成功更新的记录数目,并将其赋值给输出参数p_updated_count。
你可以使用以下代码来调用这个存储过程,并查看返回结果:
```
DECLARE
updated_count NUMBER;
BEGIN
update_score(1, 1, 85, updated_count);
DBMS_OUTPUT.PUT_LINE('Updated ' || updated_count || ' records.');
END;
```
在这个例子中,我们将学生ID设为1,课程ID设为1,新的成绩设为85,然后调用存储过程update_score,并将返回的记录数存储在变量updated_count中。最后,我们使用DBMS_OUTPUT.PUT_LINE函数将结果输出到控制台。