ORACLE觸發器,定時器。


ORACLE定時器是靠時間去觸發JOB,而觸發器是靠事件去觸發JOB.從安全性上考慮,觸發器的安全度要高於定時器。機制也優於定時器。

 

-- ORACLE通過標志表實現存儲過程觸發。數據執行完畢后更新記錄。

create table TRI_ERMETL(object_name varchar2(100),data_date char(8),flag char(1),curr_time date);
 
 insert into TRI_ERMETL values('ERMETL','20180324','N',sysdate);

CREATE OR REPLACE TRIGGER ETL_TRIGGER 
AFTER INSERT ON TRI_ERMETL
DECLARE v_date date;
begin
 select to_date(data_date,'yyyy-mm-dd') into v_date
  from (select data_date,row_number ()over(order by curr_time desc) as rn from TRI_ERMETL
  where flag ='N' and object_name='ERMETL'
 ) where rn=1 ;
 commit;
 erm_etl.main(v_date);
 update TRI_ERMETL set flag='Y' where curr_time in (select max(curr_time) from TRI_ERMETL
 where flag ='N' and object_name='ERMETL' and data_date=to_char(v_date,'YYYYMMDD'));
 end;

 

 

 

--定時器

DECLARE
   job_no_ NUMBER;  
BEGIN  
   DBMS_JOB.SUBMIT(job_no_,
                   'ERM_ETL.MAIN(TRUNC(SYSDATE)-1);',             -- 調用包,參數為當前日期前一天
           sysdate,
                   'TRUNC(sysdate)+1+12/24');     -- 12/24 每天中午2點
   COMMIT;
END;


/**
查詢JOB
 select
job,last_date,last_sec,next_sec,total_time,interval,what
from user_jobs
*/

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM