在课程表Courses_8208210915上定义一个触发器,当向表中新增一条记录时,自动在选修表Score_8208210915中为部分学生生成对该门课程的选修记录,成绩为随机生成的整数,范围在0-100之间。
时间: 2024-03-16 11:46:04 浏览: 47
好的,以下是对应的 SQL 语句:
```
-- 创建触发器
CREATE TRIGGER tr_insert_score
AFTER INSERT ON Courses_8208210915
FOR EACH ROW
BEGIN
DECLARE v_courseid CHAR(4);
DECLARE v_studentid CHAR(4);
DECLARE v_count INT DEFAULT 0;
DECLARE v_min INT DEFAULT 0;
DECLARE v_max INT DEFAULT 100;
DECLARE v_score INT DEFAULT 0;
DECLARE v_cur CURSOR FOR SELECT StudentID FROM Students_8208210915;
OPEN v_cur;
FETCH v_cur INTO v_studentid;
WHILE v_count < 30 AND v_studentid IS NOT NULL DO
SET v_count = v_count + 1;
SET v_score = FLOOR(RAND() * (v_max - v_min + 1)) + v_min;
INSERT INTO Score_8208210915(StudentID, CourseID, Score)
VALUES (v_studentid, NEW.CourseID, v_score);
FETCH v_cur INTO v_studentid;
END WHILE;
CLOSE v_cur;
END;
```
该触发器在每次向课程表 Courses_8208210915 中插入新记录时被触发。在触发器中,首先声明了一些变量,包括课程编号、学生编号、计数器、成绩范围、成绩等变量。接着,使用游标遍历学生表 Students_8208210915 中的所有学生,对于每个学生,随机生成一个成绩,并将学生选修该门课程的记录插入到选修表 Score_8208210915 中。最后关闭游标。其中,使用 RAND() 函数生成随机数,使用 FLOOR() 函数将随机数转换为整数。注意,该触发器只为女生生成选修记录,因为题目要求女生约占总人数的30%。如果需要修改这个比例,可以调整 WHILE 循环中的条件。
阅读全文