完整提交語法
VARIABLE jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => :jobno,
what => 'check_err;', -- 要執行的程序
next_date => TRUNC(SYSDATE) + 23/24, -- 今天 23:00
interval => 'TRUNC(NEXT_DAY(SYSDATE,''FRIDAY'')) + 23/24' -- 每週五 23:00
);
COMMIT;
END;
/
時間參數解析
SYSDATE 以「天」為單位,1 = 1 天
1/24 = 1 小時,1/1440 = 1 分鐘,1/86400 = 1 秒
TRUNC(SYSDATE) = 今天 00:00
TRUNC(SYSDATE) + 23/24 = 今天 23:00
NEXT_DAY(SYSDATE, 'FRIDAY') = 下個週五 00:00
TRUNC(NEXT_DAY(...)) + 23/24 = 下個週五 23:00
常用間隔範例
| 需求 | interval 運算式 |
| 每 15 分鐘 | 'SYSDATE + 1/24/4' |
| 每小時 | 'SYSDATE + 1/24' |
| 每天 02:00 | 'TRUNC(SYSDATE+1) + 2/24' |
| 每週一 03:30 | 'TRUNC(NEXT_DAY(SYSDATE,''MONDAY'')) + 3.5/24' |
| 每月 1 號 01:00 | 'TRUNC(ADD_MONTHS(SYSDATE,1),'MM') + 1/24' |
管理指令
- 查看作業:
SELECT * FROM user_jobs;
- 移除作業:
DBMS_JOB.REMOVE(jobno);
- 修改作業:
DBMS_JOB.CHANGE(jobno, what, next_date, interval);
- 強制立即執行:
DBMS_JOB.RUN(jobno);
- 10g+ 建議改用
DBMS_SCHEDULER 功能更強