寫在前面: 最近,老項目新增了日報優化的需求,麗姐讓我用觸發器去實現當數據插入或者更新的時候,實現對日報表數據更新操作。嗯嗯嗯呢,之前學習資料庫的時候,有碰到過觸發器,但都是一跳而過,也沒怎麼去真正的實踐,這次就權當再次去學習吧~~ 1.觸發器實例: 上面的觸發器例子,只是一個框架,並不能執行,這裡 ...
寫在前面:
最近,老項目新增了日報優化的需求,麗姐讓我用觸發器去實現當數據插入或者更新的時候,實現對日報表數據更新操作。嗯嗯嗯呢,之前學習資料庫的時候,有碰到過觸發器,但都是一跳而過,也沒怎麼去真正的實踐,這次就權當再次去學習吧~~
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;
上面的觸發器例子,只是一個框架,並不能執行,這裡只做簡單的記錄,網上的例子有很多,稍微看一下就能簡單入門了,這裡就不多做記錄與說明瞭~~