运行老师给出的脚本grade.sql创建实验需要的考试成绩表testScore、平时成绩表peacetime、实验成绩表experiment和总成绩表total。创建带游标存储过程,实现根据给出的考试成绩、平时成绩和实验成绩填充总成绩表中的数据。总成绩=平时成绩×20%+实验成绩×20%+考试成绩×60%。
时间: 2024-03-25 08:39:31 浏览: 61
好的,我明白了。下面是创建表和存储过程的 SQL 代码,你可以在你的数据库中执行:
创建考试成绩表testScore:
```
CREATE TABLE testScore(
student_id INT PRIMARY KEY,
score DECIMAL(5,2)
);
```
创建平时成绩表peacetime:
```
CREATE TABLE peacetime(
student_id INT PRIMARY KEY,
score DECIMAL(5,2)
);
```
创建实验成绩表experiment:
```
CREATE TABLE experiment(
student_id INT PRIMARY KEY,
score DECIMAL(5,2)
);
```
创建总成绩表total:
```
CREATE TABLE total(
student_id INT PRIMARY KEY,
score DECIMAL(5,2)
);
```
创建带游标的存储过程,实现填充总成绩表中的数据:
```
CREATE PROCEDURE fill_total()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE s_id INT;
DECLARE t_score DECIMAL(5,2);
DECLARE p_score DECIMAL(5,2);
DECLARE e_score DECIMAL(5,2);
DECLARE t_grade DECIMAL(5,2);
DECLARE cur CURSOR FOR SELECT student_id, score FROM testScore;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO s_id, t_score;
IF done THEN
LEAVE read_loop;
END IF;
SELECT score INTO p_score FROM peacetime WHERE student_id = s_id;
SELECT score INTO e_score FROM experiment WHERE student_id = s_id;
SET t_grade = p_score * 0.2 + e_score * 0.2 + t_score * 0.6;
INSERT INTO total(student_id, score) VALUES(s_id, t_grade);
END LOOP;
CLOSE cur;
END;
```
这个存储过程使用游标来遍历考试成绩表testScore中的数据,并从平时成绩表peacetime和实验成绩表experiment中获取相应的成绩,然后根据总成绩的计算公式计算总成绩,并将结果插入到总成绩表total中。
注意:在执行存储过程之前,必须先向考试成绩表、平时成绩表和实验成绩表中插入相应的数据。
阅读全文