oracle定時任務的編寫及檢視刪除

2021-09-07 16:33:46 字數 2829 閱讀 2359

declare

jobno number;

begin dbms_job.submit(

jobno,--定時器id,系統自動獲得

'prc_insert;', --what執行的過程名

sysdate,--next_date,定時器開始執行的時間,這樣寫表示立即執行

'sysdate + 15/1440'--interval,設定定時器執行的頻率,這樣寫每隔15分鐘執行一次

commit; 

end;

這裡第乙個引數是任務編號,系統自動賦值。也可以採用isubmit來手動指定

第二個引數是需要執行的任務過程,**長的話,可以將它寫到乙個儲存過程裡,再放到裡面呼叫,比如'pro_test;' (pro_test假定為乙個儲存過程名)

第三個引數是,自動任務第一次執行的時間,如果需要它立即執行,則使用sysdate

最後乙個引數,系統根據該引數的值指定下一次的執行時間。

declare

jobno

number;

begin

dbms_job.remove(45);

commit;

end;

exec dbms_job.remove(83);--刪除乙個定時器

--定時任務刪除也可以用下面的

begin

dbms_job.remove(70);--在user_jobs中查到的id

commit;

--:job可以用dba_jobs.job的值代替如:1198

end;

exec dbms_job.run(84);--執行乙個定時器

exec dbms_job.broken(83,sys.diutil.int_to_bool(1));--停止乙個定時器

exec dbms_job.interval(84, 'sysdate + 60/1440');--改變乙個定時器的執行頻率成每隔一小時執行一次

select * from user_jobs;——檢視排程任務

select * from dba_jobs_running;——檢視正在執行的排程任務

select * from dba_jobs;——檢視執行完的排程任務

定時器的引數說明:

myjob引數是由submit()過程返回的binary_ineger。這個值用來唯一標識乙個工作;

what引數是將被執行的pl/sql**塊,這裡指的是乙個儲存過程,注意名字後面的分號;

next_date引數指識何時將執行這個工作。寫job的時候可以不指定該值;

interval引數何時這個工作將被重執行。

1、 每分鐘執行

interval => trunc(sysdate,』mi』) + 1 / (24*60)

2、 每天定時執行

例如:每天的凌晨2點執行

interval => trunc(sysdate) + 1 +2 / (24)

3、 每週定時執行

例如:每週一凌晨2點執行

interval => trunc(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、 每月定時執行

例如:每月1日凌晨2點執行

interval =>trunc(last_day(sysdate))+1+2/24

5、 每季度定時執行

例如每季度的第一天凌晨2點執行

interval => trunc(add_months(sysdate,3),'q') + 2/24

6、 每半年定時執行

例如:每年7月1日和1月1日凌晨2點

interval => add_months(trunc(sysdate,'yyyy'),6)+2/24

7、 每年定時執行

例如:每年1月1日凌晨2點執行

interval =>add_months(trunc(sysdate,'yyyy'),12)+2/24

乙個完整的例子,從建立儲存過程到定時任務:

create or replace procedure userdate_to_message

asbegin

insert into message(msg_id,msg_title,msg_content,msg_flag,msg_date,user_name)  

select t."id",t.title,t.title,0,to_char(to_date(t.data_data,'dd/mm/yyyy'),'yyyymmdd'),t.userid  from userdate t 

where 1=1  and to_char(to_date(t.data_data,'dd/mm/yyyy'),'dd/mm/yyyy') = to_char(sysdate,'dd/mm/yyyy')

and ((

to_char(to_date(t.time,'hh24:mi'),'hh24:mi') = to_char(sysdate+5/1440,'hh24:mi') and t.time != '全天'

) or 

(to_char(sysdate,'hh24:mi') = '00:00' and t.time='全天'))

commit; 

end;

declare      

job1 number;--job1為定時任務名字,隨意,需要保證跟下面submit中的job1保持一致

begin

dbms_job.submit(job1, 'userdate_to_message;', sysdate, 'sysdate+1/24*60');

--每1分鐘插入一條記錄,userdate_to_message為儲存過程名稱

end;

ORACLE建立定時任務及定時任務不執行的原因

1 首先建立一張表 該錶用來執行插入資料。create table getsysdate test date 2 建立儲存過程以插入資料。create or replace procedure insertsysdate as begin insert into getsysdate values ...

oracle 定時任務

在pl sql 中執行命名 第一步 開啟乙個sql window 視窗,建立一張測試表 create table test date a date 第二步 建立儲存過程 create or replace procedure test myproc asbegininsert into test d...

oracle定時任務

1.建立儲存過程 create orreplace procedure proc test isbegin insert into test values 1 2 commit end prc job test 2.建立任務 declare job number begin sys.dbms job...