【发布时间】:2020-04-01 03:56:19
【问题描述】:
如果某人从“STUDENT”表中删除,我需要设置trigger 以将“GRADE”表中某人的成绩从null 更改为“D”。到目前为止,我有:
create or replace trigger delete_from_student
after delete on student
for each row
begin
update grades
set grade = 'D'
where grade = ''
end delete_from_student;
我知道这不可能是正确的,因为我在“结束”上加上了红色下划线。我还认为应该有人确保只有从“STUDENT”表中删除的学生的成绩才应该更改为 D。到目前为止,我们只做了如果你将某人添加到表 A,那么他们是自动放入表 B,所以我对如何使用 UPDATE 而不是带有触发器的 INSERT 并确保只影响“GRADES”表中的一行感到困惑。感谢您的帮助!
编辑:我一直在阅读更多页面,终于找到了触发触发器的语法:
create or replace trigger delete_from_student
after delete on student
for each row
begin
update grades set
grade = 'D'
where grade is null;
end delete_from_student;
现在我的问题是,就像我担心的那样,它会影响“GRADES”表中的每一行,而不仅仅是被删除的学生。所以现在我的问题是,我怎样才能确保我只影响我删除的学生的行?
第二次编辑:练习的目的只是教我们触发器的工作原理,而不是创建功能数据库。教授在开头说你不会因为其他人列出的原因在现实世界中这样做,但他只是在教我们关于触发器的知识。
【问题讨论】:
-
提示:
grade is null. -
请编辑问题并显示表格定义。这种情况没有意义。如果您删除学生记录,则假设您有有效的外键定义,则该学生不会有任何成绩。
-
您不希望成绩与任何学生无关。请参阅下面的@Belayer 答案。
-
欢迎来到 SO。请阅读本文以了解一旦有人回答了您的问题,您必须做什么。 stackoverflow.com/help/someone-answers
标签: oracle plsql database-trigger