IT虾米网

Oracle触发器简单入门记录详解

shasha 2019年08月20日 数据库 317 0

写在前面:

  最近,老项目新增了日报优化的需求,丽姐让我用触发器去实现当数据插入或者更新的时候,实现对日报表数据更新操作。嗯嗯嗯呢,之前学习数据库的时候,有碰到过触发器,但都是一跳而过,也没怎么去真正的实践,这次就权当再次去学习吧~~

 

1.触发器实例:

--创建触发器 
create or replace trigger test_trigger2 
--触发器是在insert或update动作之后执行的 
after insert or update 
--作用于dms.kqm_leaveapply表的每一行 
on dms.kqm_leaveapply 
--这里默认为new ,old 怕与其他变量有冲突,则做了修改 
referencing new as new_val old as old_val 
for each row 
--触发器限制条件   
when (new_val.statusname = '核准') 
--触发器描述语句中,新数据使用new_val进行引用,在下面的操作语句中,新数据使用:new_val进行引用 
 
declare  --声明变量 
   st_str varchar2(100); 
   et_str varchar2(100); 
 
   time1 number; 
   time2 number; 
   ...... 
begin 
   ...... 
 
   --查询结果集,进行遍历 
 
   for daylist in ( 
     --查询出指定时间段内的所有日期 
     select to_char(:new_val.startdate+rownum-1,'yyyymmdd') as dd 
     from dual 
     connect by rownum <= 
          trunc(:new_val.enddate - :new_val.startdate)+1 
   ) 
   loop 
      
        --写要进行操作的逻辑 
        ...... 
         --更新另外一张表的数据  
         update dms.d_dailyreport_t d set d.shours =  (8 - ItemValue) 
         where d.personcode = :new_val.workno and  to_char(d.ftime,'yyyy/mm/dd') like to_char(daylist.dd,'yyyy/mm/dd')  ; 
 
   end loop; 
   
     --substr()数据截取 
     st_str :=substr(:new_val.starttime,1,2) || substr(:new_val.starttime,4,2) ; 
     et_str := substr(:new_val.endtime,1,2) || substr(:new_val.endtime,4,2) ; 
     time1 := to_number(st_str); 
     time2 := to_number(et_str); 
 
     if(Item_m<0) then 
         Item_m := Item_m *(-1); 
         tHour := tHour -1; 
     end if; 
 
end test_trigger2;

  上面的触发器例子,只是一个框架,并不能执行,这里只做简单的记录,网上的例子有很多,稍微看一下就能简单入门了,这里就不多做记录与说明了~~

 

 

    

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

解决登录超时页面被嵌套详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。