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

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL触发器使用教程和命名规范 1,触发器简介 触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执行,达到对插入记录一致性,正确性和规范性控制的目的。在当年C/S时代盛行的时候,由于客户端直接连接数据库,能保证数据库一致性的只有数据库本身,此时主键(Primary Key),外键(Foreign Key),约束(Constraint)和触发器成为必要的控制机制。而触发器的实现比较灵活,可编程性强,自然成为了最流行的控制机制。到了B/S时代,发展成4层架构,客户端不再能直接访问数据库,只有中间件才可以访问数据库。要控制数据库的一致性,既可以在中间件里控制,也可以在数据库端控制。很多的青睐Java的开发者,随之将数据库当成一个黑盒,把大多数的数据控制工作放在了Servlet中执行。这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的工作量。从架构设计来看,中间件的功能是检查业务正确性和执行业务逻辑,如果把数据的一致性检查放到中间件去做,需要在所有涉及到数据写入的地方进行数据一致性检查。由于数据库访问相对于中间件来说是远程调用,要编写统一的数据一致性检查代码并非易事,一般采用在多个地方的增加类似的检查步骤。一旦一致性检查过程发生调整,势必导致多个地方的修改,不仅增加工作量,而且无法保证每个检查步骤的正确性。触发器的应用,应该放在关键的,多方发起的,高频访问的数据表上,过多使用触发器,会增加数据库负担,降低数据库性能。而放弃使用触发器,则会导致系统架构设计上的问题,影响系统的稳定性。 2,触发器示例 触发器代码类似存储过程,以PL/SQL脚本编写。下面是一个触发器的示例: 新建员工工资表salary create?table?SALARY ( ??EMPLOYEE_ID?NUMBER, --员工ID ?MONTH???????VARCHAR2(6), --工资月份 ?AMOUNT??????NUMBER?--工资金额 ) 创建与salary关联的触发器salary_trg_rai 1?? Create or replace trigger salary_trg_rai 2?? After insert on salary 3?? For each row 4???? declare 5?? Begin 6???? 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 REPLACE TRIGGER?trigger_name before | after | instead of insert | update | delete ON?table_name [FOR EACH ROW] WHEN (condition) DECLARE BEGIN ?????? --触发器代码 END; Trigger_nam

文档评论(0)

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

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

1亿VIP精品文档

相关文档