顧名思義,定時器就是定時來完成某些操作,oracle中的定時器job也是這種用法,在oracle中可以通過定義job來定期執行某個程式。oracle提供內建包dbms_job來執行job的相關操作,比如定義、提交、更改、停止、移除等。
1、建立job
使用submit()過程,這個過程中有5個引數:job、what、next_date、interval、no_parse。
procedure submit(
job out binary_integer,
what in varchar2,
next_date in date,
interval in varchar2,
no_parse in boolean:= false
);job引數是由submit()過程返回的binary_integer,這個值用來唯一標識乙個工作;what引數是將被執行的pl/sql**塊;next_date引數指何時將執行這個工作;interval引數指何時這個工作再次被執行,當interval設定為null時,該job執行結束以後,就被從佇列中刪除;no_parse引數指此工作在提交或執行時是否應進行語法分析,預設值為false,表示笨pl/sql**應該立即進行語法分析。
下面是乙個例項:
declare
jobno number;
begin
dbms_job.submit(job => jobno,
what => 'over_pack.add_dept(''education'',2710);',
next_date => trunc(sysdate + 1),
interval => 'trunc(sysdate + 1)');
dbms_output.put_line('job_no = ' || jobno);
commit;
end;
2、檢視job
3、執行job
執行job通過dbms_job.run()來立即執行乙個指定的工作,這個過程只接收乙個引數。
begin
dbms_job.run(jobno); -- jobno就是上面定義過的jobno
end;
4、更改job
begin5、刪除jobdbms_job.change(1, null, trunc(sysdate + 1) + 6 / 24, 'sysdate+4/24');
end;
begin定義了job之後,最重要的就是不要忘了用dbms_job.run()來執行job,以前我做的時候,就老是忘了執行。下面是一些常用的interval引數設定的雷子:dbms_job.remove(jobno);
end;
描述
interval引數值
每天執行一次
sysdate + 1
每小時執行一次
sysdate + 1 / 24
每10分鐘執行一次
sysdate + 10 / (60 * 24)
每30秒執行一次
sysdate + 30 / (60 * 24 * 60)
每隔乙個星期執行一次
sysdate + 7
不再執行該任務並刪除它
null
每天午夜12點
trunc(sysdate + 1)
每天早上8點30分
trunc(sysdate + 1) + (8 * 60 + 30) / (24 * 60)
每星期二中午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)
使用next_day的時候,可能會出現「週中的日期錯誤」,可以試試看將英文的日期換成中文的,比如「friday」換成「星期五」。有關oracle中job的用法,還可以參考《巧用oracle中的job來執行程式》這篇文章。
oracle的job定時器
對於dba來說,資料庫job再熟悉不過了,因為經常要資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作。但是,oracle定時器job時間的處理上,千變萬化,今天我把比較常用寫法彙總如下 oracle定時任務有sys.dbms job包完成 ...
Oracle定時器(Job)彙總
對於 dba來說,資料庫 job再熟悉不過了,因為經常要資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能優化,包括重建索引等等的工作。但是,oracle 定時器job 時間的處理上,千變萬化,今天我把比較常用寫法彙總如下 job的引數一一說明一下 引數是由 submi...
自動執行oracle儲存過程 job定時器
1.建立乙個表,為了能清楚看到定時器的運 況我們建立乙個帶有日期欄位的表 create table job table run time date 2.建立儲存過程 create or replace procedure job proc is begin insert into job table...