oracle定時執行儲存過程

2022-07-04 06:21:12 字數 3472 閱讀 1183

一直用 sql server  建作業什麼得定時執行還是很ok得  碰到oracle就懵l   真實為難我胖虎了  

create

orreplace

procedure

mh_policeman_gps_info_proc

asbegin

insert

into mh_xh_hq_policeman_info_tep select

distinct standard_code, org,name,idcard,policenumber,position,mobile,lat,lng, dt from

(select a.*,b.lat,b.lng,b.dt,b.gpsid from

(select

*from

mh_xh_hq_policeman_info

)aleft

join

(select

*from mh_policeman_gps_info where (gpsidcard,gpstime) in

(select gpsidcard,max(gpstime) from mh_policeman_gps_info group

by gpsidcard) and dt=to_char(sysdate,'

yyyymmdd

')) b

on a.idcard=b.gpsidcard where dt is

notnull

) ;commit

;end

mh_policeman_gps_info_proc;

建立儲存過程就不說了 注意加;就好 自己吃了好幾次虧 痛得教訓

接下來就是建立定時器了

declare   job111 number

;begin

dbms_job.submit(job

=>job111,what=>

'mh_policeman_gps_info_proc;

',next_date=>to_date('

20191120 21:30:00

','yyyymmdd hh24:mi:ss

'),interval=>

'sysdate+1+30/(24*60)

',no_parse=>

false);

end;

說明一下 job11這個可隨便定義

dbms_job.submit(

job

=> :job, //

以job的方式進行提交

what

=>

'儲存過程名稱

', //

job呼叫的儲存過程,建job的目的是要呼叫儲存過程

next_date

=> sysdate, //

設定的時間是由系統自動生成,可以根據自己的需要設定該時間

interval

=>

'sysdate+1

'); // 多長時間呼叫一次,時間間隔是一天,根據需要可以自己設定

一切準備就緒  開始啟動定時器

begin

dbms_job.run(

23);

commit

;end;23

就是定時器得索引 可根據下面方式查出

select

*from

user_jobs;——檢視排程任務

select

*from

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

select

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

關於job執行時間

1:每分鐘執行

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

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

job的執行頻率設定

1.每天固定時間執行,比如早上8:10分鐘:trunc(sysdate+1) + (8*60+10)/24*60

2.toad中提供的:

每天:trunc(sysdate+1)

每週:trunc(sysdate+7)

每月:trunc(sysdate+30)

每個星期日:next_day(trunc(sysdate),'星期日')

每天6點:trunc(sysdate+1)+6/24

半個小時:sysdate+30/(24*60)

3.每個小時的第15分鐘執行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)。

定時器得多種操作

1.設定定時器開關

dbms_job.broken(jobid,off);

jobid:user_jobs表中的jobid(主鍵),數字格式

off:定時任務開關,true or false,true關閉,false開啟

2.執行定時器

dbms_job.run(23);

jobid:user_jobs表中的jobid(主鍵),數字格式

3.刪除定時器

dbms_job.remove(jobid);

jobid:user_jobs表中的jobid(主鍵),數字格式

4.修改定時器

dbms_job.change(jobid,what,next_date,interval);

jobid:user_jobs表中的jobid(主鍵),數字格式

what:要執行的儲存過程,不用寫begin end 但在結尾要加分號

next_date:下一次執行的時間,這個引數是時間格式的,而不是字串

interval:執行頻率,也就是計算下一次執行時間的公式,是字串格式的

範例:

ORACLE 定時執行儲存過程

推薦用dbms scheduler方式更好 2012 11 19注 查詢 select job,broken,what,interval,t.from user jobs t job job的唯一標識,自動生成的 broken 是否處於執行狀態,n 執行 y 停止 what 儲存過程名稱 next ...

Oracle 定時執行儲存過程

1.首先建立乙個簡單的儲存過程 create or replace procedure sp wftestone msg varchar as begin delete from wf testone commit end 2.建立作業需要在命令視窗裡面執行 sql variable v jobnu...

如何定時執行Oracle儲存過程

oracle儲存過程定時執行主要有兩種方法 1 編寫shell指令碼,使用crontab在後台定時執行 a shell指令碼 bash 2.03 more pr merge query report.sh bin sh oracle base oracle home 指定環境變數 oracle ho...