Oracle触发器使用教程和命名规范V10.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle触发器使用教程和命名规范V10

触发器使用教程和命名规范V1.0属性内容文档名称:触发器使用教程和命名规范文档版本号:V1.0文档编写日期:2006-12-4文档状态:修订稿作者:李振国发布日期:2006-12-5目?录触发器使用教程和命名规范1,触发器简介2,触发器示例3,触发器语法和功能4,例一:行级触发器之一5,例二:行级触发器之二6,例三:instead of触发器7,例四:语句级触发器之一8,例五:语句级触发器之二9,例六:用包封装触发器代码10,触发器命名规范1,触发器简介触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执行,达到对插入记录一致性,正确性和规范性控制的目的。在当年C/S时代盛行的时候,由于客户端直接连接数据库,能保证数据库一致性的只有数据库本身,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。而触发器的实现比较灵活,可编程性强,自然成为了最流行的控制机制。到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。要控制数据库的一致性,既可以在中间件里控制,也可以在数据库端控制。很多的青睐Java的开发者,随之将数据库当成一个黑盒,把大多数的数据控制工作放在了Servlet中执行。这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的工作量。从架构设计来看,中间件的功能是检查业务正确性和执行业务逻辑,如果把数据的一致性检查放到中间件去做,需要在所有涉及到数据写入的地方进行数据一致性检查。由于数据库访问相对于中间件来说是远程调用,要编写统一的数据一致性检查代码并非易事,一般采用在多个地方的增加类似的检查步骤。一旦一致性检查过程发生调整,势必导致多个地方的修改,不仅增加工作量,而且无法保证每个检查步骤的正确性。触发器的应用,应该放在关键的,多方发起的,高频访问的数据表上,过多使用触发器,会增加数据库负担,降低数据库性能。而放弃使用触发器,则会导致系统架构设计上的问题,影响系统的稳定性。2,触发器示例触发器代码类似存储过程,以PL/SQL脚本编写。下面是一个触发器的示例:新建员工工资表salarycreate?table?SALARY(??EMPLOYEE_ID?NUMBER, --员工ID?MONTH???????VARCHAR2(6), --工资月份?AMOUNT??????NUMBER?--工资金额)创建与salary关联的触发器salary_trg_rai1?? Create or replace trigger salary_trg_rai2?? After insert on salary3?? For each row4???? declare5?? Begin6???? Dbms_output.put_line(‘员工ID:’ || :new.employee_id);7???? Dbms_output.put_line(‘工资月份:’ || :new.month);8???? Dbms_output.put_line(‘工资:’ || :new.amount);9???? Dbms_output.put_line(‘触发器已被执行’);10?? End;打开一个SQL Window窗口(使用PL/SQL Developer工具),或在sqlplus中输入:Insert into salary(employee_id, month, amount) values(1, ‘200606’, 10000);执行后可以在sqlplus中,或在SQL Window窗口的Output中见到员工ID:1工资月份:200606工资:10000触发器已执行在代码的第一行,定义了数据库对象的类型是trigger,定义触发器的名称是salary_trg_rai第二行说明了这是一个after触发器,在DML操作实施之后执行。紧接着的insert说明了这是一个针对insert操作的触发器,每个对该表进行的insert操作都会执行这个触发器。第三行说明了这是一个针对行级的触发器,当插入的记录有n条时,在每一条插入操作时都会执行该触发器,总共执行n次。Declare后面跟的是本地变量定义部分,如果没有本地变量定义,此部分可以为空Begin和end括起来的代码,是触发器的执行部分,一般会对插入记录进行一致性检查,在本例中打印了插入的记录和“触发器已执行”。其中:new对象表示了插入的记录,可以通过:new.column_name来引用记录的每个字段值3,触发器语法和功能触发器的语法如下CREATE OR REPLA

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档