-- 查詢該存儲過程的定時任務
select job, next_date, next_sec, failures,what, broken from dba_jobs where what like '%PRO_BD_MO_DEG_EVAL%';
var job number;
begin
sys.dbms_job.submit(job => :job,
what => 'PRO_BD_MO_DEG_EVAL;',
next_date => TRUNC(SYSDATE), --初次執行
interval => 'TRUNC(LAST_DAY(SYSDATE))+5+1/24');
commit;
end;
上述定時任務執行後會報錯:“並非所有變量都已經綁定”
需要將:job中的:刪除,將var 修改成declary,如下:
declare job number;
begin
sys.dbms_job.submit(job => job,
what => 'PRO_BD_MO_DEG_EVAL;',
next_date => TRUNC(SYSDATE), --初次執行
interval => 'TRUNC(LAST_DAY(SYSDATE))+5+1/24');
commit;
end;
1.手動調用job
begin
DBMS_JOB.RUN(40); /*40 job的id*/
end;
2.停止 job
begin
dbms_job.broken(jobId,true,next_date); /*停止一個job,jobId, job的ID,裏面參數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。 */
commit;
end;
3.刪除 job
begin
dbms_job.remove(83); /*刪除自動執行的job,參數是 job的id*/
commit;
end;
4.修改 job 的間隔時間
begin
dbms_job.interval(job,interval); /*job job的ID,interval: 計算下一次任務執行的時間表達式*/
commit;
end;
5.修改下一次執行時間
begin
dbms_job.next_date(job,next_date); /*job: job 的ID;nex_date:要修改後的計算下一次執行的時間表達式*/
commit;
end;
其他知識點:
dba_jobs 表中字段含義:
JOB 任務的唯一標識碼
LOG_USER 提交任務的用戶
PRIV_USER 賦予任務權限的用戶
SCHEMA_USER 對用戶作語法分析的用戶模式
LAST_DATE 最後一次成功執行任務的時間
LAST_SEC 最後一次成功執行任務的時間的時分秒
THIS_DATE 正在執行的任務的開始時間,若沒有則爲空
THIS_SEC 正在執行的任務的開始時間的時分秒,若沒有則爲空
NEXT_DATE 下一次執行定時任務的時間
NEXT_SEC 下一次執行定時任務的時間的時分秒
TOTAL_TIME 執行當前任務所需要的時間,單位:秒
BROKEN 標誌參數,Y表示任務中斷,以後不會再運行
INTERTAL 計算下一次執行定時任務的時間表達式
FAILURES 當前定時任務執行失敗的總次數
WHAT 執行任務的PL/SQL代碼塊
NLS_ENV 任務執行的NLS會話設置
MISC_ENV 定時任務運行的其他一些參數設置
INSTANCE 標識當前任務運行是否受限,0 沒有受限
INTERVAL 部分參數值示例:
每天午夜12點: ‘TRUNC(SYSDATE + 1)’
每天早上8點30分: ‘TRUNC(SYSDATE + 1) + (860+30)/(2460)’
每星期二中午12點: ‘NEXT_DAY(TRUNC(SYSDATE ), ‘‘TUESDAY’’ ) + 12/24’
每個月第一天的午夜12點: ‘TRUNC(LAST_DAY(SYSDATE ) + 1)’
每個季度最後一天的晚上11點: ‘TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ‘Q’ ) -1/24’
每星期六和日早上6點10分: 'TRUNC(LEAST(NEXT_DAY(SYSDATE, '‘SATURDAY"), NEXT_DAY(SYSDATE, “SUNDAY”))) + (6×60+10)/(24×60)’
每月25號00:00執行: ‘TRUNC(LAST_DAY(SYSDATE ) + 25)’
--------------------------
1:每分鐘執行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60)
或
Interval => sysdate+1/1440
2:每天定時執行
例如:每天的凌晨1點執行
Interval => TRUNC(sysdate) + 1 +1/ (24)
3:每週定時執行
例如:每週一凌晨1點執行
Interval => TRUNC(next_day(sysdate,‘星期一’))+1/24
4:每月定時執行
例如:每月1日凌晨1點執行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定時執行
例如每季度的第一天凌晨1點執行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24
6:每半年定時執行
例如:每年7月1日和1月1日凌晨1點
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24
7:每年定時執行
例如:每年1月1日凌晨1點執行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24