一直用 sql server 建作業什麼得定時執行還是很ok得 碰到oracle就懵l 真實為難我胖虎了
createorreplace
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
'); // 多長時間呼叫一次,時間間隔是一天,根據需要可以自己設定
一切準備就緒 開始啟動定時器
begindbms_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...