2017年2月7日 星期二

[oracle] JOB排程 DBMS_JOB

/*
--在oracle中設定排程執行procedure
--參數說明--參數1:為out參數,可由此jobno查詢狀態(註1)/參數2:要執行的procedure名稱/參數3:下次要執行的時間/參數4:要執行的間隔(只要執行一次傳NULL即可)
/*
下面是常有的設置Interval的方法:
    每天固定時間運行,比如早上8:10分鐘:Trunc(Sysdate+1) + 8/24

    每天:trunc(sysdate+1)
    每週:trunc(sysdate+7)
    每月:trunc(sysdate+30)
    每個星期日:next_day(trunc(sysdate),'SUNDAY')  
    每天6點:trunc(sysdate+1)+6/24    
    每半個小時:sysdate+30/1440
*/
/*
DBMS_JOB.SUBMIT(
   job       OUT    BINARY_INTEGER,
   what      IN     VARCHAR2, NEXT_DATE IN DATE DEFAULTSYSDATE,
   interval  IN     VARCHAR2 DEFAULT 'NULL',
   no_parse  IN     BOOLEAN DEFAULT FALSE,
   instance  IN     BINARY_INTEGER DEFAULT ANY_INSTANCE,
   force     IN     BOOLEAN DEFAULT FALSE);
*/
/*
查看執行狀況
select * from user_jobs;
broken=y為任務停止, n為任務啟動成功
*/
--建立程序
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'sp_ins_stk05_0809;',  sysdate, '');
  dbms_output.put_line(jobno);
  commit;
end;
/
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'SP_NA_DAILY_STORE_STINE_TRP031(''20161021'',''20161031'');',  sysdate + 660/1440, '');
  dbms_output.put_line(jobno);
  commit;
end;
/
--每天固定時間啟動範例
declare
  jobno    number;
begin
  dbms_job.submit(jobno, 'Gt_Invoice_f_bk(''20161231'');',  sysdate, 'trunc(sysdate+1)+6/24');
  dbms_output.put_line(jobno);
  commit;
end;
/
--移除程序

begin
dbms_job.remove(141);
end;
/

--暫停程序
begin
  dbms_job.broken([jobs: 程序#], [broken: true/false], [next_date: 下次一執行日期時間]);
end;
/
--next_date未指定時, 預設為目前的日期時間

--恢復程序
begin
  dbms_job.broken(158, false, sysdate);
end;
/
*/

沒有留言: