1)創建測試表
|
1
|
create
table
test1(a
date
);
|
2)創建存儲過程
|
1
2
3
4
5
|
create
or
replace
procedure
myproc
as
begin
insert
into
test1
values
(sysdate);
end
;
/
|
3)創建job
|
1
2
3
4
5
|
declare
job1 number;
begin
dbms_job.submit(job1,
'MYPROC;'
,sysdate,
'sysdate+1/1440'
);//每分鍾執行一次
commit
;
end
;
|
---------------------------或者-------------------------------
|
1
2
3
4
5
6
7
8
9
|
declare
job2 number;
begin
dbms_job.submit(job => job2,
what =>
'myproc;'
,
next_date => sysdate,
interval =>
'sysdate+1/1440'
);
commit
;
end
;
|
4)查詢job
|
1
|
select
job, broken, what, interval
from
user_jobs t;
|
JOB BROKEN WHAT INTERVAL
1 27 N MYPROC; sysdate+1/1440
2 25 N p_auto_del_mobile_gxxj; sysdate+1
3 26 N p_auto_del_mobile_gxxj; sysdate+1
5)運行job
|
1
2
3
|
begin
dbms_job.run(27);
end
;
|
6)刪除job
|
1
2
3
|
begin
dbms_job.remove(25);
end
;
|
job: 指的是job的id號。比如下面的 23
failures:job執行的時候失敗次數,如果超過了15次,那么broken列將被標為Y,以后就不會運行該job了
broken:默認為N,如果為Y,意味着不再執行該job!
interval:執行job的間隔時間。
what:該job的實際工作
sysdate+1/2 每隔12小時執行一次
sysdate+3/1440 每隔 3 分鍾執行一次
trunc(sysdate+1) 每天凌晨
trunc(sysdate+7) 每七天凌晨
trunc(sysdate+30) 每30天凌晨
next_day(trunc(sysdate), ''sunday'') 每周日凌晨
trunc(sysdate+1)+6/24 每天6點
trunc(sysdate+1)+1/3 每天的8點運行
sysdate+30/1440 每30分鍾
trunc(last_day(sysdate)) + 1 每月第一天凌晨
trunc(last_day(sysdate)) + 1 + 8/24 + 30/1440 每月第一天8點半
每天的8點到20點之點,每隔15分鍾運行一次
|
1
2
3
4
5
6
7
|
case
when
to_number(to_char(sysdate,
'hh24'
)) >= 8
and
to_number(to_char(sysdate,
'hh24'
)) <= 20
then
sysdate + 15 / 1440
else
trunc(sysdate + 1) + 1 / 3
end
|
6-10月份,每隔30天的凌晨開始運行,其余月份每隔一天早上4點運行
|
1
2
3
4
5
6
7
|
case
when
to_number(to_char(sysdate,
'mm'
)) >= 6
and
to_number(to_char(sysdate,
'mm'
)) <= 10
then
trunc(sysdate + 30)
else
trunc(sysdate + 1) + 1 / 6
end
|
