標籤:
select SYSDATE --2016-04-14 16:57:09 目前時間
,SYSDATE+1 --2016-04-15 16:57:09 第二天的目前時間
,TRUNC(SYSDATE) --2016-04-14 當前日期
,TRUNC(SYSDATE)+1 --2016-04-15 第二天
,trunc(sysdate)+23/24 --2016-04-14 23:00:00 今天晚上23點
,trunc(next_day(sysdate,‘星期六‘))+23/24 --2016-04-16 23:00:00 未來周六
,trunc(next_day(sysdate,‘星期二‘))+23/24 --2016-04-19 23:00:00 未來周二
from dual;
Oracle JOB的建立,定時執行任務
begin
sys.dbms_job.submit(job => :job,
what => ‘check_err;‘,
next_date => trunc(sysdate)+23/24,
interval => ‘trunc(next_day(sysdate,‘‘星期五‘‘))+23/24‘);
end;
其中:
job:系統自動產生編號。
what:check_err一個過程。
next_date:設定下次執行時間。這裡是今天晚上23:00
interval:設定時間間隔,多久執行一次。這裡是每周的星期五晚上23:00
函數next_day返回日期中包含指定字元的日期,trunc 函數去掉日期裡的時間,也就是得到的是某天的00:00,時間是以天為單位的所以要得到某某點某某分,就需要分數:
1/24 一小時;
1/1440 一分;
1/3600 一秒;
--1.plsql中學習job
--學習job
--建表
create table test_job(para_date date);
commit;
insert into test_job values(sysdate);
commit;
select * from test_job;
truncate table test_job
--建立存貯過程
create or replace procedure test_jobproce as
begin
insert into test_job values(sysdate);
end test_jobproce;
--建立job
--建立job後預設是執行的
declare test_job_really number;
begin
dbms_job.submit(test_job_really,‘test_jobproce;‘,sysdate,‘sysdate+1/1440‘);
commit;
end;
---停止job 25是建立的job test_job_really
begin
dbms_job.broken(366,true);
commit;
end;
--人工執行job
begin
dbms_job.run(366);
commit;
end;
--刪除job
begin
dbms_job.remove(366);
commit;
end;
--查看執行結果
select * from test_job order by test_job.para_date desc;
--查看job
select * from sys.user_jobs
--使用下面的SQL查詢是否JOB還在Running,前提是需要job執行時間不能過短
select * from dba_jobs_running
--除了submit參數外,其餘的幾個參數有:
--運行job
dbms_job.run(v_job);
--停止一個job,裡面參數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。
dbms_job.broke(v_job,true,next_date);
--刪除某個job
dbms_job.remove(v_job);
dbms_job.what(v_job,‘sp_fact_charge_code;‘);
--修改某個job名 修改下一次已耗用時間
dbms_job.next_date(v_job,sysdate);
關於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)。
oracle job SYSDATE