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...