pl/sql development 创建触发器

选择触发器-->新建

触发器的名字:自拟定的

触发时间:bofore 执行事件之前           

               AFTER 触发器定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动作晚于约束处理。

              INSTEAD OF触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作。
在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。

执行事件:1 增加 2修改 3删除 4增加或修改 5增加或修改或删除

选择相应的表或视图

Statement level总结:针对语句执行的则勾选,只触发一次,代码中没有For each row;针对语句操作的数据行则不勾选,每条受语句影响且符合触发条件的数据,都会触发一次触发器,代码中有For each row。

触发器创建实例

create or replace trigger yswz_inserr_xw
  before insert     --创建的时候设定的在insert执行之前
  on ys_xx_xwzx     --在哪个表格执行
  for each row      --行级触发器    这个没理解  要是哪位大神理解的话   可以留言交流下
declare
  -- local variables here
begin
  IF (TO_CHAR(sysdate,'DAY') IN ('星期六','星期日')) OR (TO_CHAR(sysdate, 'HH24:MI') NOT BETWEEN '08:30' AND '18:00') THEN
     RAISE_APPLICATION_ERROR(-20001, '不是上班时间,不能修改新闻表');
end if;
end;

触发触发器的执行效果图


和上面的触发器实例可能稍有不服,但是不影响测试结果

再来一个触发器实例

create or replace trigger yswz_insert_xw_log
  after insert
  on ys_xx_xwzx 
  for each row
declare

begin
  if inserting then --当执行新增操作时执行
    insert into FAIL_LOG ( sid,SBYY,jlxgsj  ) values (:new.sid,'insert',:new.jlxgsj) ;
end if;
end;

使用触发器创建自增长序列

首先创建一个sequence

CREATE SEQUENCE seqTest
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
接下来创建触发器

create or replace trigger yswz_insert_sjbh
  before insert or update
  on ys_cx_kfdw_xm_ld_fj 
  for each row
declare
  -- local variables here
begin
  if inserting then
    insert into fail_log (sid,sjbh ) values (:NEW.SID ,seq_fs_log.Nextval)
      ;
end if;
end;



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值