oracle触发器练习.docx

上传人:b****4 文档编号:4034248 上传时间:2022-11-27 格式:DOCX 页数:15 大小:456.30KB
下载 相关 举报
oracle触发器练习.docx_第1页
第1页 / 共15页
oracle触发器练习.docx_第2页
第2页 / 共15页
oracle触发器练习.docx_第3页
第3页 / 共15页
oracle触发器练习.docx_第4页
第4页 / 共15页
oracle触发器练习.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

oracle触发器练习.docx

《oracle触发器练习.docx》由会员分享,可在线阅读,更多相关《oracle触发器练习.docx(15页珍藏版)》请在冰豆网上搜索。

oracle触发器练习.docx

oracle触发器练习

oracle-触发器练习

触发器课堂练习1

1、当向SC表插入数据时,修改(或添加)SC_NUMBER(包括学生学号和选课门数两列)表格中的数据。

createorreplacetriggertr_sc_AR_I

afterinsertonsc

foreachrow

begin

updatesc_numbersetscnum=scnum+1wheresno=:

new.sno;

ifsql%notfoundthen

insertintosc_numbervalues(:

new.sno,1);

endif;

end;

测试结果:

2、当删除SC表中数据时,修改(或添加)SC_NUMBER中的数据。

createorreplacetriggertr_sc_AR_D

afterdeleteonsc

触发器课堂练习2

1、修改STUDENT表数据时,限制不能修改学生的系别(不能修改CS系学生的系别)。

createorreplacetriggertr_student_BR_U1

beforeupdateofsdeptonstudent

foreachrow

when(old.sdept='CS')--old前没有":

"

begin

raise_application_error(-20001,'不能修改CS系学生的系别!

');

end;

测试结果:

2、插入课程时,课程号以‘S’开头的课程的学分不能低于3分。

createorreplacetriggertr_course_BR_I

beforeinsertoncourse

foreachrow

when(new.credit<3andolike'S%')

begin

raise_application_error(-20002,'S开头的课程学分不能低于3分!

');

end;

测试结果:

3、不能删除90分以上学生的选课信息。

createorreplacetriggertr_sc_BR_D

beforedeleteonsc

foreachrow

when(old.grade>90)

begin

raise_application_error(-20003,'不能删除90分以上学生的选课信息!

');

end;

测试结果:

练习1

1、插入Student表中数据时,CS系学生的年龄不能大于30岁。

createorreplacetriggertr_student_BR_I

beforeinsertonstudent

foreachrow

--when(new.sage>30andnew.sdept='CS')

begin

if(:

new.sage>30and:

new.sdept='CS')then

raise_application_error(-20004,'CS系学生的年龄不能大于30岁!

');

endif;

end;

测试结果:

2、当修改Student表中的年龄字段时,使其只能增加,不能减少。

createorreplacetriggertr_student_BR_U

beforeupdateofsageonstudent

foreachrow

when(new.sage

begin

raise_application_error(-20005,'年龄只能增加不能减少!

');

end;

测试结果:

3、删除Student表中的学生信息时,判断在SC表中该学生的平均成绩是否高于60,若高于60,则不能删除,否则允许删除,同时删除SC表该学生对应的选课信息。

createorreplacetriggertr_student_BR_D

beforedeleteonstudent

foreachrow

declare

avg_scorenumber;

begin

selectavg(grade)intoavg_scorefromscwheresc.sno=:

old.sno;

if(avg_score>60)then

raise_application_error(-20006,'不能删除平均分大于60的学生信息!

');

endif;

if(avg_score<=60)then

deletefromscwheresc.sno=:

old.sno;

endif;

end;

测试结果:

练习2

在Student表中添加列:

sum_Grade(总成绩),avg_grade(平均成绩)。

在SC表中作一触发器,当添加,删除或修改一行之后,将该学生在Student表中的总成绩和平均成绩相应改变。

createorreplacepackagepk_trigger

is

tr_scnumsmallint;--sc_number表中的当前选课数量

tr_snamestudent.sname%type;

tr_cnoo%type;--记录正在更新的课程号

tr_newsnosc.sno%type;--记录更新后的学生号

tr_oldsnosc.sno%type;--记录更新前的学生号

endpk_trigger;

createorreplacetriggertr_sc_BR_I_U_D

beforeinsertorupdateordeleteonsc

foreachrow

begin

pk_trigger.tr_newsno:

=:

new.sno;

pk_trigger.tr_oldsno:

=:

old.sno;

end;

createorreplacetriggertr_sc_AL_I_U_D

afterinsertorupdateordeleteonsc

declare

v_sumnumber;

v_avgnumber;

begin

--更新变化之前的学生的总分和平均成绩

selectsum(grade),avg(grade)intov_sum,v_avgfromscwheresno=pk_trigger.tr_oldsno;

updatestudentsetsum_grade=v_sum,avg_grade=v_avgwheresno=pk_trigger.tr_oldsno;

--更新变化之后的学生总分和平均分

selectsum(grade),avg(grade)intov_sum,v_avgfromscwheresno=pk_trigger.tr_newsno;

updatestudentsetsum_grade=v_sum,avg_grade=v_avgwheresno=pk_trigger.tr_newsno;

end;

测试结果:

修改成绩

修改学号

删除

练习3

插入或修改(修改课程号时)选课信息时,若该课程的选课人数已满,则不允许操作,并抛出相应的错误提示。

createorreplacepackagepk_trigger

is

tr_scnumsmallint;--sc_number表中的当前选课数量

tr_snamestudent.sname%type;

tr_cnoo%type;--记录正在更新的课程号

tr_newsnosc.sno%type;--记录更新后的学生号

tr_oldsnosc.sno%type;--记录更新前的学生号

endpk_trigger;

createorreplacetriggertr_sc_BR_IU

beforeinsertorupdateonsc

foreachrow

begin

pk_trigger.tr_cno:

=:

o;

end;

createorreplacetriggertr_sc_AL_IU

afterinsertorupdateonsc

declare

v_snumbersmallint;

v_scntsmallint;

begin

--查询课程最大选课人数

selectsnumberintov_snumberfromcoursewherecno=pk_trigger.tr_cno;

--查询当前选课人数

selectcount(sno)intov_scntfromscwherecno=pk_trigger.tr_cno;

--如果选课人数已满,则抛出相应错误提示

if(v_snumber

raise_application_error(-20008,'课程'||trim(pk_trigger.tr_cno)||'选课人数已满!

');

endif;

end;

测试结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1