欢迎来到天天文库
浏览记录
ID:38687079
大小:1004.50 KB
页数:6页
时间:2019-06-17
《触发器讲解(未打印)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、触发器:1,提出问题:当用户登陆的时候,自动记录该用户的名字,时间和IP。当用户在星期天对某张表进行删除操作的时候,我们提示不能这样做当用户删除某条记录的时候,自动将记录保存到另外一张表去2,解决之道————触发器触发器是指存放在数据库中,被隐含执行的存储过程,可以支持dml触发器,还支持基于系统时间(启动数据库,关闭数据库,登陆)和ddl操作建立触发器。3,触发器的分类:ddl(createtable,createview,drop......)触发器dml(insert,delete,update)触发器系统触发器(与系统相关的触发器
2、,比如用户登陆,退出,启动数据库,关闭数据库)4,触发器快速入门:在某张表上添加一条数据,提示“添加了一条记录”A:创建一张表Createtablemy_emp(idnumber;nanevarchar2(32));B:创建一个触发器:createorreplacetriggertrilafterinsertonscott.my_empbegindbms_output.put_lind(‘添加一条’);end;案例2:在某张表修改多条数据的时候,提示多次“修改了数据”====》这里讲解行级触发器和语句级触发器A:创建一张表Createta
3、blemy_emp(idnumber;nanevarchar2(32));B:创建一个触发器:createorreplacetriggertril2afterupdateonscott.my_empforeachrow---表示这是一个行级触发器begindbms_output.put_lind(‘修改一条’);end;案例3:为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全createorreplacetriggertril3beforedeleteonscott.my_empBeginif
4、to_char(sysdate,‘day’)in(‘星期日’,‘星期六’)thendbms_output.put_lind(‘休息期不能删除员工’);raise_application_error(100,‘休息期不能删除员工’);//下面截图讲解endif;end;此截图是对上面raise_application_error(100,‘休息期不能删除员工’);的讲解。5,使用条件谓词:当触发器中同时包含多个触发时机(insertupdatedelete)时,为了在触发器代码中区分具体的触发事件,可以使用三个条件:insertingupd
5、atingdeleting案例入门:为了禁止工作人员在休息日改变员工信息,开发人员可以建立before语句触发器,从而实现数据安全,在给出提示时,明确提示用户是进行的insert,update还是delete操作createorreplacetriggertril3beforedeleteorupdateordeleteonscott.my_empbegincasewheninsertingthendbms_output.put_lind(‘请不要添加’);raise_application_error(100,‘请不要添加’);when
6、updatingthendbms_output.put_line(‘请不要修改’);raise_application_error(101,‘请不要修改’);whendeletingthendbms_output.put_line(‘请不要删除’);raise_application_error(102,‘请不要删除’);endcase;end;6,使用:old和:new案例:1,在修改emp表雇员的薪水时,显示雇员工资修改前和修改后的值2,如确保在修改员工工资不能低于原有工资案例2:编写一个触发器,保证当用户在删除一张emp表记录的时候
7、,自动把删除的记录备份到另外一张表emp_bak中。A:建立一张备份表createtablemep_bak(idnumber;namevarchar2(2000));B:建立触发器createorreplacetriggertri4beforedeleteonScott。empforeachrowbegin----执行语句insertintoemp_bak(id,name)values(:old。empno,:old。ename);end;案例3:编写一个新的触发器,如何控制员工的新工资不能低于原来的工资,同时也不能高于原来工资的20%c
8、reateorreplacetriggertir5beforeinsertonscott.empforeachrowbeginif(:new.sal<:old.sal
9、
10、:new.sal>:o
此文档下载收益归作者所有