oracle trigger(触发器)字段触发

Trigger 专栏收录该内容
1 篇文章 0 订阅

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

语法:

CREATE [OR REPLACE] TRIGGER trigger_name
 {BEFORE | AFTER }
 {INSERT | DELETE | UPDATE [OF column [, column …]]}
 [OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
 ON [schema.]table_name | [schema.]view_name 
 [REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
 [FOR EACH ROW ]
 [WHEN condition]

例子:

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

 

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

创建diy_test表:

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

往diy_test插入数据:

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

创建diy_test_1表:

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

往diy_test_1插入数据

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

 

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

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

 

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

SQL> update diy_test set b=3 where a=1;
已更新 1 行。

SQL> select * from diy_test_1;
         A          C
---------- ----------
         1          1

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

 

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

SQL> update diy_test set b=2 where a=1;
已更新 1 行。

SQL> select * from diy_test_1;
         A          C
---------- ----------
         1          2

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

  • 4
    点赞
  • 0
    评论
  • 4
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

diyyong

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值