定時執行存儲過程

定時執行存儲過程

基礎

  • Oracle定時器

Oracle定時器:定時執行某個存儲過程。

通過pl/SQL的圖形化界面可以看到。定時器包括:調度和存儲過程連接口

wKiom1S_IAXgWQhUAAIqtCON2QI051.jpg

 

  • 存儲過程連接口

存儲過程連接口,主要告訴定時器要執行哪一個存儲過程。存儲過程連接口就是存儲過程執行的入口。從圖形化界面可以看出“Action”就是要執行的存儲過程。而“Arguments”就是調用該存儲過程所需要的參數類型及存儲過程所調用的必須參數。

wKiom1S_IBCAIVoPAAILeAm8jDo602.jpg

  • 存儲過程

存儲過程(Stored Procedure)是在大型數據庫系統中,一組爲了完成特定功能的SQL 語句集,存儲在數據庫中經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象,任何一個設計良好的數據庫應用程序都應該用到存儲過程。

  • 調度

調度最主要的功能就是告訴定時器神什麼時候執行定時任務,執行的任務的頻率是多久。

 

 wKiom1S_ID_RImFiAAG7LfI0TIM930.jpg

案件腳本的創建

/* 創建可執行程序 */
begin
    DBMS_SCHEDULER.CREATE_PROGRAM(
        program_name       
=>'peace_sj_his.PROG_DATASYNC',
        program_action     
=>'peace_sj_his.P_DATASYNC',
        program_type       
=>'STORED_PROCEDURE',
        number_of_arguments
=>3,
        comments           
=>'數據同步程序',
        enabled            
=> false
    );
end;
/

/* 設置可執行程序的輸入參數 */
begin
    DBMS_SCHEDULER.define_program_argument(
        program_name     
=>'peace_sj_his.PROG_DATASYNC',
        argument_position
=>1,
        argument_type    
=>'VARCHAR2',
        default_value    
=>''
    );
    DBMS_SCHEDULER.define_program_argument(
        program_name     
=>'peace_sj_his.PROG_DATASYNC',
        argument_position
=>2,
        argument_type    
=>'VARCHAR2',
        default_value    
=>''
    );
    DBMS_SCHEDULER.define_program_argument(
        program_name     
=>'peace_sj_his.PROG_DATASYNC',
        argument_position
=>3,
        argument_type    
=>'VARCHAR2',
        default_value    
=>''
    );
END;
/

/* 創建調度表 */
begin
    DBMS_SCHEDULER.create_schedule(
        schedule_name  
=>'peace_sj_his.SCH_DATASYNC',
        repeat_interval
=>'FREQ=MINUTELY;INTERVAL=2',
        start_date     
=> sysdate,
        comments       
=>'數據同步調度'
    );
end;
/

/* 創建作業 */
begin
    DBMS_SCHEDULER.create_job(
        job_name     
=>'peace_sj_his.JOB_PPTN',    
        program_name 
=>'peace_sj_his.PROG_DATASYNC',
        schedule_name
=>'peace_sj_his.SCH_DATASYNC',
        job_class    
=>'DEFAULT_JOB_CLASS',           
        comments     
=>'雨量數據同步作業',
        auto_drop    
=> false,
        enabled      
=> false
    );
end;
/

/* 啓動可執行程序 */
exec DBMS_SCHEDULER.enable('PROG_DATASYNC');

/* 啓動作業 */
exec DBMS_SCHEDULER.enable('JOB_PPTN');

/* 設置不同的作業參數 */
begin
    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
        job_name         
=>'peace_sj_his.JOB_PPTN',
        argument_position
=>1,
        argument_value   
=>'ST_PPTN_R'
    );
    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
        job_name         
=>'peace_sj_his.JOB_PPTN',
        argument_position
=>2,
        argument_value   
=>'TM'
    );
    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
        job_name         
=>'peace_sj_his.JOB_PPTN',
        argument_position
=>3,
        argument_value   
=>'STCD'
    );
end;
/
----Job管理-----------------------------------------------------------------------

/* 禁用Job */
exec dbms_scheduler.disable('JOBTEST');
/* 執行Job */
exec dbms_scheduler.run_job('JOBTEST');
/* 停止Job */
exec dbms_scheduler.stop_job('JOBTEST');
/* 刪除Job */
exec dbms_scheduler.drop_job('JOBTEST');

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章