触发器小问题?想了很久很久
说明: 学生表: Id 学号 First_name 名 Last_name 姓 Major 专业Current_credits 当前已得学分
CREATE TABLE students (
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
major VARCHAR2(30),
current_credits NUMBER(3) 当前已得学分
)
INSERT INTO STUDENTS (id, first_name, last_name, major, current_credits) VALUES
(10000, 'Scott', 'Smith', 'Computer Science', 0);
............................................(其他插入数据省略)
专业表: major 专业 Total_credits 学分数 Total_students 人数
CREATE TABLE major_stats (
major VARCHAR2(30),
total_credits NUMBER,
total_students NUMBER);
insert into major_stats(‘Computer Science’,0,2);
.......................................
课程表
classes开课 Department 开课系别 Course 开课课程
Description 课程名称 max_students 课程容量 current_students 现有学生数量
num_credits 学分
CREATE TABLE classes (
department CHAR(3),
course NUMBER(3),
description VARCHAR2(2000),
max_students NUMBER(3),
current_students NUMBER(3),
num_credits NUMBER(1),
room_id NUMBER(5),
CONSTRAINT classes_department_course
PRIMARY KEY (department, course),
CONSTRAINT classes_room_id
FOREIGN KEY (room_id) REFERENCES rooms (room_id)
);
INSERT INTO CLASSES(department, course, description, max_students,
current_students, num_credits, room_id)
VALUES ('HIS', 101, 'History 101', 30, 0, 4, 99999);
...............................................
学生选修表 Student_id 学生号
Department 开课系别 Course 开课课程 Grade 分数
CREATE TABLE registered_students (
student_id NUMBER(5) NOT NULL,
department CHAR(3) NOT NULL,
course NUMBER(3) NOT NULL,
grade CHAR(1),
CONSTRAINT rs_grade
CHECK (grade IN ('A', 'B', 'C', 'D', 'E')),
CONSTRAINT registeredStudentPK
PRIMARY KEY (student_id,department, course),
CONSTRAINT rs_student_id
FOREIGN KEY (student_id) REFERENCES students (id),
CONSTRAINT rs_department_course
FOREIGN KEY (department, course)
REFERENCES classes (department, course)
);
INSERT INTO registered_students (student_id, department, course, grade)
VALUES (10000, 'CS', 102, 'A');
.....................................................
创建触发器:
create trigger updateRegisterStudent3
after insert on registered_students
for each row
declare
v_NumCredits classes.num_credits%type;
begin
select num_credits
into v_NumCredits
from classes
where department=:new.Department
and course=:new.course;
update students
set current_credits=current_credits+v_NumCredits where id=:new.Student_id;
update classes
set current_students=current_students+1 where department=:new.Department and course=:new.Course;
update major_stats ???????????????????????不知该怎么跟新专业表中的内容
end updateRegisterStudent3;
题目要求:
在运行创建表的语句后,数据库中有数据不一致的情况存在,比如在往register_student表中插入数据的时候,相应的学生表的current_credit字段需要更新,classes表中的current_student也应该增加1,major_stats表也需要更新。针对这种数据库不一致的情况,请你写一个程序,将数据库从不一致的状态调整到一直的状态。
我自己写的触发器中classes表 和 students表都能自动更新,保持一致性,但是往里面添加major_stats的更新时却不知该怎么写,怎么写都错?(触发器不能建立),但只能建立一个触发器完成三个表的跟新来保持数据库的一致性。
请教高手???
CREATE TABLE students (
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
major VARCHAR2(30),
current_credits NUMBER(3) 当前已得学分
)
INSERT INTO STUDENTS (id, first_name, last_name, major, current_credits) VALUES
(10000, 'Scott', 'Smith', 'Computer Science', 0);
............................................(其他插入数据省略)
专业表: major 专业 Total_credits 学分数 Total_students 人数
CREATE TABLE major_stats (
major VARCHAR2(30),
total_credits NUMBER,
total_students NUMBER);
insert into major_stats(‘Computer Science’,0,2);
.......................................
课程表
classes开课 Department 开课系别 Course 开课课程
Description 课程名称 max_students 课程容量 current_students 现有学生数量
num_credits 学分
CREATE TABLE classes (
department CHAR(3),
course NUMBER(3),
description VARCHAR2(2000),
max_students NUMBER(3),
current_students NUMBER(3),
num_credits NUMBER(1),
room_id NUMBER(5),
CONSTRAINT classes_department_course
PRIMARY KEY (department, course),
CONSTRAINT classes_room_id
FOREIGN KEY (room_id) REFERENCES rooms (room_id)
);
INSERT INTO CLASSES(department, course, description, max_students,
current_students, num_credits, room_id)
VALUES ('HIS', 101, 'History 101', 30, 0, 4, 99999);
...............................................
学生选修表 Student_id 学生号
Department 开课系别 Course 开课课程 Grade 分数
CREATE TABLE registered_students (
student_id NUMBER(5) NOT NULL,
department CHAR(3) NOT NULL,
course NUMBER(3) NOT NULL,
grade CHAR(1),
CONSTRAINT rs_grade
CHECK (grade IN ('A', 'B', 'C', 'D', 'E')),
CONSTRAINT registeredStudentPK
PRIMARY KEY (student_id,department, course),
CONSTRAINT rs_student_id
FOREIGN KEY (student_id) REFERENCES students (id),
CONSTRAINT rs_department_course
FOREIGN KEY (department, course)
REFERENCES classes (department, course)
);
INSERT INTO registered_students (student_id, department, course, grade)
VALUES (10000, 'CS', 102, 'A');
.....................................................
创建触发器:
create trigger updateRegisterStudent3
after insert on registered_students
for each row
declare
v_NumCredits classes.num_credits%type;
begin
select num_credits
into v_NumCredits
from classes
where department=:new.Department
and course=:new.course;
update students
set current_credits=current_credits+v_NumCredits where id=:new.Student_id;
update classes
set current_students=current_students+1 where department=:new.Department and course=:new.Course;
update major_stats ???????????????????????不知该怎么跟新专业表中的内容
end updateRegisterStudent3;
题目要求:
在运行创建表的语句后,数据库中有数据不一致的情况存在,比如在往register_student表中插入数据的时候,相应的学生表的current_credit字段需要更新,classes表中的current_student也应该增加1,major_stats表也需要更新。针对这种数据库不一致的情况,请你写一个程序,将数据库从不一致的状态调整到一直的状态。
我自己写的触发器中classes表 和 students表都能自动更新,保持一致性,但是往里面添加major_stats的更新时却不知该怎么写,怎么写都错?(触发器不能建立),但只能建立一个触发器完成三个表的跟新来保持数据库的一致性。
请教高手???
...全文
相关推荐
jk触发器波形图怎么画?主从jk触发器波形图
在主从JK触发器中,信号的传递需要经过两个触发器,因此会在两个时钟周期之间产生一个延迟,这可以避免由于时钟信号的不确定状态带来的竞争-冒险问题。首先,了解JK触发器的基本概念和工作原理是必要的。
关于oracle触发器before和after的应用问题
#### DML触发器与替代触发器- **DML触发器**:这类触发器可在数据操纵语言(DML)操作前或后触发,适用于单个行或整个语句级别。
D触发器设计
**原型测试与调整**:制造出初步样品后,测试团队检查芯片性能,修复所有发现的问题。 7. **批量生产**:所有问题解决后,开始大规模生产芯片。**1.3 版图设计规则及验证**1.
RS触发器和SR触发器
本资源详细介绍了RS触发器和SR触发器在时序逻辑电路中的核心地位。触发器作为构成时序逻辑电路的基础单元,其主要特点是具有记忆功能,能够存储一位二进制数码,并在适当条件下维持稳定状态(0和1)并进行状态
SQL触发器的使用及语法
触发器可以用来实现业务逻辑的自动化、数据的完整性和一致性、数据的安全性等方面的控制。何为触发器?在 SQL Server 中,触发器就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。


