开发者社区> 东方瀚海鲍> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PLSQL_Oracle Trigger触发器的基本概念和用法

简介: 2014-06-14 Created By BaoXinjian 一、基本概念 触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。
+关注继续查看

2014-06-14 Created By BaoXinjian

一、基本概念


触发器是许多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。

触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。

1. 触发器事件:insert, update, insert

2. 触发时间: after, before

3. 触发参数: :old和:new 

    (1). delete 只有:old 

    (2). insert 只有:new 

    (3). update 同时存在:old 和:new 

4 触发层级:行级触发器,语句级触发器 

    (1). 行级触发器是加入了for each row 

    (2). 语句级触发器不需要for each row 

    只有应该了for each row才会有:old 或者:new 

5. 其他 

    (1). 触发器是不能使用rollback

    (2). 触发器抛出异常:raise_application_error('-2000','不能删除');  -20999到-20000

6. 触发器的主要作用

  • 1、 允许/限制对表的修改
  • 2、 自动生成派生列,比如自增字段
  • 3、 强制数据一致性
  • 4、 提供审计和日志记录
  • 5、 防止无效的事务处理
  • 6、 启用复杂的业务逻辑

7. 触发器的组成部分:

  • 触发器名称
  • 触发语句
  • 触发器限制
  • 触发操作

8. 触发器的类型

  • 语句触发器
  • 行触发器
  • INSTEAD OF 触发器
  • 系统条件触发器
  • 用户事件触发器

 

二、触发器的结构


触发器的组成部分:

  • 触发器名称
  • 触发语句
  • 触发器限制
  • 触发操作

1. 触发器名称

create trigger biufer_employees_department_id

命名习惯:

biufer(before insert update for each row)

employees 表名

department_id 列名

2. 触发语句

表或视图上的DML语句 或DDL语句

数据库关闭或启动,startup shutdown 等等

before insert or update

of department_id

on employees

referencing old as old_value

new as new_value

for each row

说明:

(1) 无论是否规定了department_id ,对employees表进行insert的时候

(2) 对employees表的department_id列进行update的时候

3. 触发器限制

when (new_value.department_id<>80 )

限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。

其中的new_value是代表更新之后的值。

4. 触发操作

是触发器的主体

begin

       :new_value.commission_pct :=0;

end;

主体很简单,就是将更新后的commission_pct列置为0

触发器不会通知用户,便改变了用户的输入值。

 

三、具体案例 - 使用最多的行级出发器


案例:当表进行增删改后输出信息,以监控表的增删

1. 行级触发器 

 1 CREATE OR REPLACE TRIGGER test_trigger                               
 2    AFTER INSERT OR DELETE OR UPDATE 
 3    ON xxgl_test_je_headers  
 4    FOR EACH ROW                            
 5 BEGIN                                                           
 6    IF INSERTING 
 7    THEN 
 8       DBMS_OUTPUT.put_line ('I'); 
 9       DBMS_OUTPUT.put_line ('insert batch_id='||:new.je_batch_id); 
10    ELSIF UPDATING 
11    THEN 
12       DBMS_OUTPUT.put_line ('U'); 
13       DBMS_OUTPUT.put_line ('update old batch_name='||:old.batch_name); 
14       DBMS_OUTPUT.put_line ('update new batch_name='||:new.batch_name); 
15    ELSIF DELETING 
16    THEN 
17       DBMS_OUTPUT.put_line ('D'); 
18       DBMS_OUTPUT.put_line ('delete batch_id='||:old.je_batch_id);    
19    END IF; 
20 END; 

 2. Create 测试该触发器

 3. Update 测试该触发器

   

 4. Delete 测试该触发器

 

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《Oracle高性能自动化运维》一一3.5 小结
本节书摘来自华章出版社《Oracle高性能自动化运维》一 书中的第3章,第3. 5节,作者:冷菠  著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看
940 0
PLSQL_Oracle Exception异常分类、异常抛出、异常处理、异常传播(概念)
2014-06-03 Created By BaoXinjian 一、摘要 在PLSQL程序开发过程中,很重要的部分就是对程序异常的监控和处理,包括如何触发异常,何时进行处理,如何进行处理,是否将程式中的所有异常集中在一起,通过公共异常处理的procedure或function,如果没有完善的...
1391 0
PLSQL_Oracle基本概念总结(汇总)
2014-08-16 Created By BaoXinjian 一、SQL Tunning类 1. 列举集中表的连接方式 Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) Or hash join/merge join/nest loop(cluster join)...
1019 0
Oracle_spool的用法
使用spool的方法,可以导出几百万的数据方法二:采用以下脚本      set trimspool on      set linesize 20000      set pagesize 0      set newpage 1 ...
809 0
518
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载