一、建立一個預存程序
create or replace procedure MY_Procedure
is
--這裡用到了遊標
cursor cur is
select * from users where length(name) > 10 ;
begin
for user in cur
loop
insert into users_temp values(user.id,user.passwd);
end loop;
end;
二、建立作業
variable job_num number;
begin
dbms_job.submit(:job_num,'MY_Procedure;',sysdate,'sysdate+1');
commit;
end;
三、運行作業
begin
dbms_job.run(:job_num);
end;
四、查詢作業
select priv_user,job,what from user_jobs;
五、 刪除作業
begin
dbms_job.remove(:job_num);
end;
六、時間
Sysdate+1/1440 --每1分鐘執行一次
Sysdate+5/1440 --每5分鐘執行一次
trunc(sysdate+1)+2/24 --下一天的2點(淩晨)執行一次
'SYSDATE + 7' --最後一次執行的7天之後執行
'SYSDATE + 1/48' --每半個小時執行一次
'NEXT_DAY(TRUNC(SYSDATE), ''MONDAY'') + 15/24' --每個禮拜一的下午3點
'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3),''THURSDAY'')' --每個季度的第一個星期四
最後那一項可以參考如下:
每天午夜12點 'TRUNC(SYSDATE + 1)'
每天早上8點30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12點 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每個月第一天的午夜12點 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每個季度最後一天的晚上11點 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6點10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6*60+10)/(24*60)'
其中li_jobno是它的ID,可以通過這個ID停掉這個任務,最後想說的是不要執行多次,你可以在裡面管理起來,發現已經運行了就不SUBMIT
每天運行一次 'SYSDATE + 1'
每小時運行一次 'SYSDATE + 1/24'
每10分鐘運行一次 'SYSDATE + 10/(60*24)'
每30秒運行一次 'SYSDATE + 30/(60*24*60)'
每隔一星期運行一次 'SYSDATE + 7'
不再運行該任務並刪除它 NULL
每年1月1號零時 trunc(last_day(to_date(extract(year from sysdate)||'12'||'01','yyyy-mm-dd'))+1)