- 1、本文档共75页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
专题八-触发器
专题八 触发器 回顾 过程和函数都是命名的PL/SQL程序块,合称子程序 过程有三种参数模式:IN、OUT和IN OUT 过程用户执行特定的任务,函数用于执行任务并返回值 过程与函数的相同点和不同点 程序包是对过程、函数、变量、常量、游标、异常及PL/SQL数据类型等的封装 程序包由两部分组成,即包规范和包主体 使用程序包的优点 教学目标 了解触发器的概念和作用 理解触发器的设计原则 掌握触发器的组成部分 熟练使用DML触发器 了解INSTEAD OF触发器和系统触发器 掌握触发器的查看、禁用、激活和删除 工作任务 1 使用BEFORE行级触发器 2 使用AFTER行级触发器 3 使用BEFORE语句级触发器 4 使用AFTER语句级触发器 5 使用INSTEAD OF触发器 6 使用DDL触发器 7 使用数据库启动和关闭触发器 8 使用用户登录和退出触发器 9 管理触发器 相关实践知识 触发器是当某一事件发生时自动执行的特殊的过程,利用它我们可以实现复杂的约束和业务逻辑,实现更高的数据安全性。 BEFORE行级触发器 公司规定,如果给员工加薪,每次的加薪比例不能超过本人原工资的10%,为实现这一功能,可以在表emp上建立一个BEFORE行级触发器(DML触发器中的一种)。 1. 从开始菜单中打开SQL*Plus工具,以SCOTT用户的身份登录到数据库。 2. 在SQL提示符下输入如下的代码来创建触发器。 BEFORE行级触发器 CREATE OR REPLACE TRIGGER tr_emp_bef_row BEFORE UPDATE OF sal ON emp FOR EACH ROW DECLARE l_scale NUMBER; BEGIN l_scale:=(:NEW.sal-:OLD.sal)/:OLD.sal; IF l_scale0.1 THEN DBMS_OUTPUT.PUT_LINE(对不起,员工的加薪比例不能超过10%!); :NEW.sal:=:OLD.sal*1.1; END IF; END TRIGGER; / BEFORE行级触发器 3. 按回车键后,系统提示“触发器已创建”,说明触发器创建成功。 4. 假如现在要给编号是7369的员工加薪。先用如下的查询语句查看一下他的原工资。 SELECT empno,sal FROM emp WHERE empno=7369; 可以查出编号是7369的员工的原工资是800。 BEFORE行级触发器 5. 计划给该员工加薪到1000,用如下的UPDATE语句修改。 UPDATE emp SET sal=1000 WHERE empno=7369; 6. 按回车后,系统提示“对不起,员工的加薪比例不能超过10%!“和”已更新一行”,再同第4步相同的查询语句,查看该员工的工资,结果如图所示。 从图中可以看出,该员工的工资被修改为880,而不是1000,触发器被执行。 BEFORE行级触发器 7. 假定现在公司的规定变为:只有原工资高于1500的员工加薪才不能超过10%,低于 1000的不再受此限制。可在第2步的创建触发器的代码中,在FOR EACH ROW子句的后面加入如下触发条件。 WHEN (OLD.sal1500) 8. 创建触发器成功后,继续用如下的UPDATE语句想把编号是7369的员工的工资改为1000。 UPDATE emp SET sal=1000 WHERE empno=7369; BEFORE行级触发器 9. 语句执行后系统提示“已更新一行”,再用语句查询可以查出该员工的工资被更新为1000。而不是880×1.1=968,可见因为触发条件的限制,触发器内的触发操作语句并没有被执行。 10. 如果把创建触发器的代码中的“BEFORE”改为“AFTER”,按回车后将会出现如图所示的结果。 由此可见,只能在BEFORE行级触发器中重新设置NEW值,而不能在AFTER触发器中更改NEW值。 AFTER行级触发器 现要审计员工的工资变动情况,用一个表来记录相关信息,利用AFTER行级触发器向表中插入数据。 1. 以SCOTT用户身份登录到数据库后,建立记录工资变动情况的表t_em_sal_change,在SQL提示符下输入如下的建表语句。 AFTER行级触发器 2. 在SQL提示符下,输入以下的代码来创建AFTER行级触发器。 AFTER行级触发器 3. 修改部门编号是10的所有员工的工资,给每人加薪100。 UPDATE emp SET sal=sal+100 WHERE deptno=10; 4. 语句执行后系统提示“已更新3行”,再用SELECT语句查询表t_em_sal_ch-ange内的信息,
文档评论(0)