- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 触发器的创建与应用
触发器可以帮助用户完成许多特殊的功能: 启用复杂的业务逻辑。 强制数据的完整性和一致性。 提供审计和日志记录。 自动生成派生列。 防止某些无效的事务处理。 在Oracle系统中,触发器包括以下几个组成部分: 触发器名称 触发语句 触发限制条件 触发器操作 11.2 触发器类型 按照触发的时间,将触发器分为: BEFORE触发器,指事前触发器 在触发语句执行前触发器被触发 AFTER触发器,指事后触发器 在触发语句执行以后触发器被触发 INSTEAD OF触发器,指替代触发器 触发语句被触发器操作替代 11.2 触发器类型 按照触发的事件,将触发器分为: DML触发器,对表或视图执行DML操作时触发的触发器 可以定义为事前触发也可以定义为事后触发 按照触发时DML操作影响的记录多少,DML触发器又可分为: 行级触发器 :DML语句每操作一行,行级触发器就会被调用一次 语句级触发器 :DML语句不论影响多少行数据,语句级触发器只被调用一次 DDL触发器,在数据库中执行DDL操作时触发的触发器 可以定义为事前触发也可以定义为事后触发 DDL触发器又可以分为: 数据库级DDL触发器 :数据库中任何用户执行了相应的DDL操作该类触发器都被触发。 用户级DDL触发器 :只有在创建触发器时指定方案的用户执行相应的DDL操作时触发器才被触发,其他用户执行该DDL操作时触发器不会被触发。 用户事件触发器,这类触发器是指与用户执行的DCL操作或LOGON/LOGOFF操作相关的触发器 有些允许事前触发,有些允许事后触发。 该类触发器可以定义在数据库级被所有用户触发,也可以定义在用户级被指定用户触发。 系统事件触发器:是指由数据库系统事件触发的触发器 有些允许事前触发,有些允许事后触发。 也可以分为用户级和数据库级两种。 通常情况下使用的触发器都是组合类型的触发器,如事前行级触发器 、事前语句级触发器等。 但并不是任何类型的触发器都可以组合在一起,如LOGON和STARTUP事件的触发器只能选择事后触发,而LOGOFF和SHUTDOWN事件的触发器只能选择事前触发。 11.3.1 创建DML事件触发器 创建DML触发器的格式如下: CREATE [OR REPLACE] TRIGGER [schema.]trigger_name {BEFORE | AFTER} {INSERT | UPDATE | UPDATE OF column1 [, column2 [, …]] | DELETE} ON [schema.]table_name | [schema.]view_name [FOR EACH ROW] [WHEN (logical_expression)] [DECLARE] declaration_statements; BEGIN execution_statements; END [trigger_name]; 1.语句级触发器 创建触发器时若未使用FOR EACH ROW子句,则该触发器称为语句级触发器。 DML语句执行之前或之后,触发器只被触发一次。 例11.1 为scott.emp表创建一个事后语句级触发器。当用户向emp表中插入新数据后,该触发器将统计emp表中的新行数并输出。 CREATE OR REPLACE TRIGGER tri1_insert_emp AFTER INSERT ON scott.emp DECLARE rows NUMBER; BEGIN SELECT count(*) INTO rows FROM scott.emp; dbms_output.put_line( emp表中当前包含||rows||条新记录); END; 从该例子中可以看出:在语句级触发器的操作部分可以访问触发表,但在后面要讲的行级触发器中不允许访问触发表 ,自行分析原因。 例11.2 创建一个事前语句级触发器tri_update_emp,当用户对表scott.emp中的deptno字段进行UPDATE操作时该触发器被触发。 CREATE OR REPLACE TRIGGER tri_update_emp BEFORE UPDATE OF deptno ON scott.emp BEGIN dbms_output.put_line(您正在修改表emp的deptno列); END tri_update_emp; 2.行级触发器 创建触发器时若使用了FOR EACH ROW子句,则该触发器称为行级触发器。 DML语句每操作一行记录,行级触发器就被触发一次,当DML命令影响多行记录时行级触发器就被触发多次。 行级触发器的重要特点: 可以在触发器中引用当前DML命令正在操
您可能关注的文档
- 第04章 数字控制系统建模与分析.ppt
- 第06章 资本成本_武汉大学考研_公司理财_罗琦老师.ppt
- 第05章 连续时间信号的采样 数字信号处理[刘兴钊][电子教案].ppt
- 第06章未来能源和燃料工业用催化技术与应用.ppt
- 第 6 章 虚拟现实的编程技术.ppt
- 第08周实验 枚举 泛型 常用类.doc
- 第08章 Pro C 的使用.pptx
- 第05章配气机构.doc
- 第08章 交通分配基础.ppt
- 第06章 进排气系统及排气净化装置.ppt
- 河北省农村信用社招聘公共基础知识矛盾的同一性与斗争性试题.doc
- 重庆市教育考试院 2023 高职分类考试 电气技术类专业技能测试考试说明.pdf
- 通用版带答案高中历史上第五单元晚清时期的内忧外患与救亡图存常考点.pdf
- 退休返聘人员管理细则例文(4篇).pdf
- 趸船防火防爆操作规定(5篇).pdf
- 嘉泽新能:2022年度环境、社会及管治(ESG)报告.pdf
- 维业股份:2022年度环境、社会及治理报告(ESG)报告.pdf
- 越秀资本:2022年环境、社会及治理(ESG)报告.pdf
- 新产业:2022年度环境、社会和公司治理(ESG)报告.pdf
- 利亚德:2022年度环境、社会、治理(ESG)暨社会责任报告.pdf
文档评论(0)