Oracle創建定時任務


Oracle創建定時任務

創建不帶參數Job

每天早上8點執行過程DAILY_REPORT,job_id由數據庫分配

DECLARE  
job_id  number;  
BEGIN  
SYS.DBMS_JOB.SUBMIT  
( job => job_id   
,what => 'DAILY_REPORT'  
,next_date => sysdate  
,interval => 'TRUNC(SYSDATE + 1) + (8*60)/(24*60)'  ---每天早上8:00
,no_parse => TRUE  
);  
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(job_id));  
COMMIT;  
END;  
/ 

創建帶參數Job

對於帶參數Job,上面的方法行不通(許多博客都說可以,但是實際測試發現並不行),后面找到Stackoverflow上的解答
用dbms_scheduler創建Job 是可以的.下面為示例代碼

DECLARE  
job_name varchar(200) :='DAILY_REPORT';
to_email varchar(200) :='xxxx@qq.com';
BEGIN  
dbms_scheduler.create_job(job_name        => job_name,
                          start_date      => to_date('19-04-2020 20:30:00', 'dd-mm-yyyy hh24:mi:ss'),
                          job_type => 'STORED_PROCEDURE',  
                          job_action => 'DAILY_REPORT',
                          number_of_arguments => 1,
                          repeat_interval  => 'FREQ=DAILY',
                          enabled         => false );
dbms_scheduler.set_job_argument_value(job_name => job_name,
                                      argument_position => 1,
                                      argument_value => to_email);
dbms_scheduler.enable(job_name);
                                  
COMMIT;  
END;  

管理dbms_scheduler創建的job
立即運行Job dbms_scheduler.run_job(job_name)
刪除Job dbms_scheduler.drop_job(job_name)

Oracle Job 管理

查看Job

select * from user_jobs; --可以查看當前用戶所有Job
select * from all_jobs;  --查看所有Job

刪除Job

begin
  dbms_job.remove(12); --12為具體的job ID,可以通過select * from user_jobs查詢得到
end;

立即執行Job

begin
	dbms_job.run(12);--運行指定Job
end;

執行頻率

下面是一些常用的執行頻率,通過設置Job的interval參數修改

  • 每天運行一次
    'SYSDATE + 1'

  • 每小時運行一次
    'SYSDATE + 1/24'

  • 每10分鍾運行一次
    'SYSDATE + 10/(60*24)'

  • 每30秒運行一次
    'SYSDATE + 30/(602460)'

  • 每隔一星期運行一次
    'SYSDATE + 7'

  • 每個月最后一天運行一次
    'TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,1))) + 23/24'

  • 每年1月1號零時
    'TRUNC(LAST_DAY(TO_DATE(EXTRACT(YEAR FROM SYSDATE)||'12'||'01','YYYY-MM-DD'))+1)'

  • 每天午夜12點
    'TRUNC(SYSDATE + 1)'

  • 每天早上8點30分
    'TRUNC(SYSDATE + 1) + (860+30)/(2460)'

  • 每星期二中午12點
    'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

  • 每個月第一天的午夜12點
    'TRUNC(LAST_DAY(SYSDATE ) + 1)'

  • 每個月最后一天的23點
    'TRUNC (LAST_DAY (SYSDATE)) + 23 / 24'

  • 每個季度最后一天的晚上11點
    'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

  • 每星期六和日早上6點10分
    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (660+10)/(2460)'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM