JOB:和JAVA中的job相似,都是定時任務。oracle
首先,建表:app
-- Create table create table MYDAILYDK ( ID NUMBER(19) not null, NAME VARCHAR2(255), DKTIME DATE ) tablespace NG_DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );
而後,建個存儲過程,用來向表裏插入數據:函數
create or replace procedure mbproc_mydailydk as begin insert into mydailydk(id,name,dktime) values(s_madailydk.nextval,'小明',sysdate); commit; end;
JOB參數簡介:spa
/** job參數是由Submit()過程返回的binary_ineger。這個值用來惟一標識一個工做。
what參數是將被執行的PL/SQL代碼塊。
next_date參數指識什麼時候將運行這個工做。
interval參數什麼時候這個工做將被重執行。
no_parse參數指示此工做在提交時或執行時是否應進行語法分析——TRUE
指示此PL/SQL代碼在它第一次執行時應進行語法分析,
而FALSE指示本PL/SQL代碼應當即進行語法分析。
*/code
建立JOB:htm
begin sys.dbms_job.submit(job => :job, what => 'mbproc_mydailydk;', next_date => to_date('08-11-2016 14:22:08', 'dd-mm-yyyy hh24:mi:ss'), interval => 'sysdate+1'); commit; end;
說明:ORACLE會自動生成惟一的JOB標識,就是submit的第一個參數。rem
查看建立的job:文檔
select * from user_jobs;
手動運行Job,參數爲自動生成的惟一標識,個人是64,把:job換成64便可,因爲個人開始時間是sysdate,手動天天的這個時候去執行一次,所以查看存儲過程當中插入的表會有一條數據插入:get
begin dbms_job.run(:job); end;
查看被插入的表:it
select * from mydailydk;
中止job:
begin dbms_job.broken(64, true); end;
刪除job:
begin dbms_job.remove(64); end;
另外,關於 dbms_job 這個pakage中的其它函數請自行查閱:change()、Interval()、Isubmit()、Next_Date()等等。
附上pakage的文檔的鏈接:
https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_job.htm#i1000681