oracle-触发器练习.docx
文本预览下载声明
触发器课堂练习1 当向SC表插入数据时,修改(或添加)SC_NUMBER(包括学生学号和选课门数两列)表格中的数据。create or replace trigger tr_sc_AR_Iafter insert on scfor each row begin update sc_number set scnum=scnum+1 where sno=:new.sno; if sql%notfound then insert into sc_number values(:new.sno,1); end if; end;测试结果:当删除SC表中数据时,修改(或添加)SC_NUMBER中的数据。create or replace trigger tr_sc_AR_Dafter delete on scfor each row begin update sc_number set scnum=scnum-1 where sno=:old.sno; select scnum into pk_trigger.tr_scnum from sc_number where sno=:old.sno; if(pk_trigger.tr_scnum=0) then delete from sc_number where sno=:old.sno; end if;end;测试结果:当修改SC表中数据时,若修改的是学号,则对应修改SC_NUMBER表中的选课门数,否则打印“某某(学生姓名)的学生选课信息已经修改”信息。create or replace trigger tr_sc_AR_Uafter update on scfor each row begin if(:old.sno = :new.sno) then select sname into pk_trigger.tr_sname from student where sno=:new.sno; dbms_output.put_line(pk_trigger.tr_sname||的学生选课信息已经修改,由原课程|| trim(:o)||修改为新课程||trim(:o)); end if; if(:old.sno :new.sno) then update sc_number set scnum=scnum+1 where sno=:new.sno; if sql%notfound then insert into sc_number values(:new.sno,1); end if; update sc_number set scnum=scnum-1 where sno=:old.sno; select scnum into pk_trigger.tr_scnum from sc_number where sno=:old.sno; if(pk_trigger.tr_scnum=0) then delete from sc_number where sno=:old.sno; end if; end if; end;测试结果:触发器课堂练习 2修改STUDENT表数据时,限制不能修改学生的系别(不能修改CS系学生的系别)。create or replace trigger tr_student_BR_U1before update of sdept on studentfor each rowwhen (old.sdept=CS) --old前没有:begin raise_application_error(-20001,不能修改CS系学生的系别!);end;测试结果:插入课程时,课程号以‘S’开头的课程的学分不能低于3分。create or replace trigger tr_course_BR_Ibefore insert on course for each rowwhen (new.credit3 and o like S%)begin raise_application_error(-20002,S开头的课程学分不能低于3分!);end;测试结果:不能删除90分以上学生的选课信息。create or replace trigger tr_sc_BR_Dbefore delete on scfor each rowwhen (old.grade90)begin raise_application_error(-20003,不能删除90分以上学生的选课信息!);end;测试结果:练习 11、插入Student表中数据时,CS系学生的年龄不能大于30岁。 create or replace trigger tr_student_BR_Ibefore insert on stu
显示全部