当前位置:操作系统 > Unix/Linux >>

DBMS_SCHEDULER的使用

DBMS_SCHEDULER的使用
 
1.通过DBMS_SCHEDULER.CREATE_JOB直接创建job
[sql] 
CREATE TABLE T_ROSANU  
(  
  R_ID   VARCHAR2(10),  
  R_DATE TIMESTAMP(6)  
);  
--表已创建。  
BEGIN  
  DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'job_create_rosanu',  
                            JOB_TYPE        => 'PLSQL_BLOCK',  
                            JOB_ACTION      => 'BEGIN  
                                                  INSERT INTO T_ROSANU VALUES ('' job '', SYSDATE);  
                                                  COMMIT;  
                                                END;',  
                            ENABLED         => TRUE,  
                            START_DATE      => SYSTIMESTAMP,  
                            REPEAT_INTERVAL => 'SYSTIMESTAMP + 1/1440',  
                            COMMENTS        => 'rosanu_create_job');  
END;  
--PL/SQL 过程已成功完成。  
SELECT R_ID, TO_CHAR(R_DATE, 'yyyy-mm-dd hh24:mi:ss') FROM T_ROSANU;  
/*  
R_ID     TO_CHAR(R_DATE,'yyyy-mm-dd hh24:mi:ss)  
-----------------------------------------------  
job        2013-03-29 18:12:11  
job        2013-03-29 18:13:11  
job        2013-03-29 18:14:11  
*/  
这里的使用方法和dbms_jobs差不多,不过这个提供了加灵活的使用方法,比如可以执行匿名块和执行操作系统命令等;
2.CREATE_JOB结合CREATE_PROGRAM
[sql] 
CREATE OR REPLACE PROCEDURE PROC_ROSANU(IN_ID IN VARCHAR2) IS  
BEGIN  
  INSERT INTO T_ROSANU VALUES (IN_ID, SYSDATE);  
  COMMIT;  
END;  
-- 过程已创建。  
  
-- 创建Program   
BEGIN  
  DBMS_SCHEDULER.CREATE_PROGRAM(PROGRAM_NAME        => 'program_rosanu',  
                                PROGRAM_ACTION      => 'PROC_ROSANU',  
                                PROGRAM_TYPE        => 'STORED_PROCEDURE',  
                                NUMBER_OF_ARGUMENTS => 1,  
                                COMMENTS            => 'Rosanu_PROGRAM',  
                                ENABLED             => FALSE);  
END;  
-- PL/SQL 过程已成功完成。  
  
--设置Program参数  
BEGIN  
  DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(PROGRAM_NAME      => 'program_rosanu',  
                                         ARGUMENT_POSITION => 1,  
                                         ARGUMENT_TYPE     => 'VARCHAR2',  
                                         DEFAULT_VALUE     => 'program');  
END;  
-- PL/SQL 过程已成功完成。   
  
--执行Program  
EXEC DBMS_SCHEDULER.ENABLE('program_rosanu');  
-- PL/SQL 过程已成功完成。   
  
-- 创建Job  
BEGIN  
  DBMS_SCHEDULER.CREATE_JOB(JOB_NAME        => 'job_rosanu',  
                            PROGRAM_NAME    => 'program_rosanu',  
                            COMMENTS        => 'rosanu_create_job',  
                            REPEAT_INTERVAL => 'SYSTIMESTAMP + 1/1440',  
                            AUTO_DROP       => FALSE,  
                            ENABLED         => TRUE);  
END;  
--  PL/SQL 过程已成功完成。  
  
SELECT R_ID, TO_CHAR(R_DATE, 'yyyy-mm-dd hh24:mi:ss') FROM T_ROSANU;  
  
/*  
R_ID     TO_CHAR(R_DATE,'yyyy-mm-dd hh24:mi:ss')  
------------------------------------------------  
job        2013-02-29 20:20:11  
program    2013-02-29 20:20:09  
program    2013-02-29 20:21:09  
job        2013-02-29 20:21:11  
*/  
从这里使用的参数可以看出CREATE_PROGRAM把CREATE_JOB中的部分参数给独立出来,使得更加灵活的控制;
3.CREATE_JOB结合CREATE_PROGRAM和CREATE_SCHEDULE
[sql] 
exec DBMS_SCHEDULER.drop_job('job_create_rosanu');   
--PL/SQL 过程已成功完成。   
truncate table t_rosanu;   
--表被截断。   
BEGIN  
  DBMS_SCHEDULER.CREATE_SCHEDULE(REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1',  
                                 START_DATE      => SYSDATE,  
         
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,