Oracle触发器

什么是触发器?
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。
具体举例:
1、 在一个表中定义的语句级的触发器,当这个表被删除时,程序就会自动执行触发器里面定义的操作过程。这个就是删除表的操作就是触发器执行的条件了。
2、 在一个表中定义了行级的触发器,那当这个表中一行数据发生变化的时候,比如删除了一行记录,那触发器也会被自动执动。(网上百度的)
触发器的用处在哪里呢?
感觉在程序中,触发器就只能充当监控然后更新。在系统中,用到的一点就是监控某个名字被更改之后触发把所有有关这个字段的数据一起更改过来。(个人的看法)
公司中用到的实例:系统中的一些数据不知道在什么时候哪个阶段被更改了?场景不能重现,所以创建触发器监控数据发邮件通知管理员手动更改回来。虽然这样的做法我自己觉得不是最好的办法,但我对于这种问题束手无策只能安装组长的意思码代码。
针对一个表的字段值更改为空时,触发触发器给另外一个新建的表添加纪录。然后做了一个定时任务,查询当天有记录的数据发送邮件通知处理人。新建表这边字段设置的不多,把主键设置为自增。
触发器的实例SQL:

CREATE OR REPLACE TRIGGER "TR_MONITOR_PROJECTYEAR"
  AFTER UPDATE  ON PD_PROJECT_YEAR_INVEST
  FOR EACH ROW
DECLARE

  pid  Varchar2(255); 
  paid  Varchar2(255); 

begin
    dbms_output.put_line('UPDATE触发器开始执行!');
    pid := :OLD.PROJECTID;
    paid := :OLD.PARENTID;

IF :NEW.INVESTDETAIL is NULL THEN
    INSERT INTO BO_MONITOR_INVEST VALUES (monitor_invest_sequence.nextval,pid,paid,'项目年度投资信息',TO_CHAR(SYSDATE, 'yyyy-mm-dd'));
 END IF;
END;

定时任务跟邮件发送就不做介绍了,有什么不懂得百度。
比较详细的介绍触发器的博客http://www.jb51.net/article/80804.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值