第一步: 建立一個存儲過程sql
1:好比建立一個存儲過程名:PROC_DAYCUT_CTRL_UPDATEspa
plSql中執行SQL命令:開發
SELECT * FROM dba_Jobs a WHERE a.WHAT = 'PROC_DAYCUT_CTRL_UPDATE;';rem
檢查是否已經存在這個存儲過程,若是沒有存在,則能夠建立這個名get
create or replace procedure PROC_DAYCUT_CTRL_UPDATE as
begin
update t_daycut_ctrl t3 set t3.prev_settle_date=TO_DATE(to_char(sysdate,'YYYY-MM-DD'),'YYYY-MM-DD');commit;
end;
/it
建立名爲:PROC_DAYCUT_CTRL_UPDATE 的存儲過程,執行想要的Sqldate
補充:查詢存儲過程的sqlselect
select TEXT from user_source where name='PROC_DAYCUT_CTRL_UPDATE';next
第二步:建立一個Job查詢
plSql中執行SQL命令:
declare proc_daycut_job number;
begin
dbms_job.submit(proc_daycut_job,
'PROC_DAYCUT_CTRL_UPDATE;',
sysdate,'sysdate+1/1440');
end;
/
解釋:建立了一個名字爲proc_daycut_job 每分鐘自動執行PROC_DAYCUT_CTRL_UPDATE存儲過程的Job
第三步:運行Job
建立好的Job默認是開啓的,因此沒有必要啓動,實在想啓動的話,先關閉,再啓動
先查詢Job號:
SELECT * FROM dba_Jobs a WHERE a.WHAT = 'PROC_DAYCUT_CTRL_UPDATE;';
1:中止Job
begin
dbms_job.broken(249, true);
commit;
end;
/
其中 249 爲查詢出來的Job號
2:啓動Job
begin
dbms_job.run(249);
commit;
end;
/
若是想刪除Job
begin
dbms_job.remove(247);
commit;
end;
/
第四:補充知識
SELECT * FROM dba_Jobs a WHERE a.WHAT = 'PROC_DAYCUT_CTRL_UPDATE;';
查詢出來字段解釋:
dba_jobs中幾個比較重要的字段
job: 指的是job的id號。好比上面的 41
failures:job執行的時候失敗次數,若是超過了15次,那麼broken列將被標爲Y,之後就不會運行該job了
broken:默認爲N,若是爲Y,意味着再也不執行該job!
interval:執行job的間隔時間。
what:該job的實際工做。
其中:
描述 INTERVAL參數值
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
後續有不少開發填坑的文章發佈,若是對你有幫助,請支持和加關注一下