ITPub博客

首页 > 数据库 > Oracle > ORACLE触发器字段触发

ORACLE触发器字段触发

Oracle 作者:刚刚入道 时间:2015-12-28 12:57:58 0 删除 编辑

说到oracle的触发器,一直以来都以为只能以表触发,今天有需求某个字段的值改变后触发一系列动作,原来想这个表改变再触发,后来想了一下,触发器本来很耗性能,如果这个表的每个字段更改都触发,这样做就造成性能浪费,查了一下发现原来可以字段触发:

语法:

  1. CREATE [OR REPLACETRIGGER trigger_name  
  2.  {BEFORE | AFTER }  
  3.  {INSERT | DELETE | UPDATE [OF column [, column …]]}  
  4.  [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]  
  5.  ON [schema.]table_name | [schema.]view_name   
  6.  [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]  
  7.  [FOR EACH ROW ]  
  8.  [WHEN condition]  

例子:

  1. create or replace trigger 触发器名  
  2. after update of 字段  
  3. on 表  
  4. for each row  
  5. when (new.字段=条件)  

 

-------------------------------------------------------------------          验证          -----------------------------------------------------------------------

创建diy_test表:

  1. SQL> create table diy_test  
  2.   2  (a number,  
  3.   3  b number  
  4.   4  )  
  5.   5  /  
  6. 表已创建。  

往diy_test插入数据:

  1. SQL> insert into diy_test values(1,1);  
  2. 已创建 1 行。  

创建diy_test_1表:

  1. SQL> create table diy_test_1  
  2.   2  (a number,  
  3.   3  c number  
  4.   4  )  
  5.   5  /  
  6. 表已创建。  

往diy_test_1插入数据

  1. SQL> insert into diy_test_1 values(1,1);  
  2. 已创建 1 行。  

 

创建字段级触发器:当diy_test的字段b更改为2,则把diy_test_1的字段c改成2

  1. SQL> create or replace trigger diy_test_trigger  
  2.   2  after update of b  
  3.   3  on diy_test  
  4.   4  for each row  
  5.   5  when (new.b=2)  
  6.   6  begin  
  7.   7  update diy_test_1 set c=2 where a= :new.a;  
  8.   8  end;  
  9.   9  /  
  10. 触发器已创建  

 

测试1:先将diy_test的b更改成3

  1. SQL> update diy_test set b=3 where a=1;  
  2. 已更新 1 行。  
  3.   
  4. SQL> select * from diy_test_1;  
  5.          A          C  
  6. ---------- ----------  
  7.          1          1  

结果显示diy_test_1的字段c没发生改变

 

测试2:将diy_test的b更改成2

  1. SQL> update diy_test set b=2 where a=1;  
  2. 已更新 1 行。  
  3.   
  4. SQL> select * from diy_test_1;  
  5.          A          C  
  6. ---------- ----------  
  7.          1          2  

结果显示diy_test_1的字段c变成2,触发成功。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28996307/viewspace-1965840/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle数据库迁移
请登录后发表评论 登录
全部评论

注册时间:2015-09-16

  • 博文量
    9
  • 访问量
    29025