首先创建一张测试表
--创建测试表
CREATE TABLE JOB_TEST (
job_date DATE NOT NULL
);
创建Oracle Job需要提供任务调度的程序(Programe)以及任务调度的策略(Schedule,用于指定何时调用Program), 所以,
首先创建一个program(被调用的程序)
--被调度的程序
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
program_name =>'PROGRAM_TEST', --程序名称
program_action =>'BEGIN
INSERT INTO JOB_TEST VALUES (sysdate);
COMMIT
END', --被调度时做的操作
program_type =>'PLSQL_BLOCK', /*操作类型 1. PLSQL_BLOCK: 表示该程序可执行的PL/SQL匿名快
2. STORED_PROCEDURE: 表示程序为存储过程,函数,或包
3. EXECUTEABLE: 表示程序位于操作系统上的可执行脚本或程序
*/
number_of_arguments =>0,
comments =>'INSERT SYSDATE INTO TABLE', --注释
enabled =>TRUE
);
END;
/
然后,创建Schedule,指定调度时机
--调度器(定义调度策略)
BEGIN
SYS.DBMS_SCHEDULER.create_schedule (
schedule_name =>'SCHEDULE_TEST', --调度器名字
repeat_interval =>'FREQ=SECONDLY;INTERVAL=30', --调用目标的间隔
start_date =>SYSDATE, --开始时间
comments =>'Start Evert 30 secondly' --注释
);
END;
/
接着就可以使用上面的Program和Scheduler来创建一个Job了
--创建JOB
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name =>'JOBTEST', --JOB名称
program_name =>'PROGRAM_TEST', --被调用的程序名称(Programe)
schedule_name =>'SCHEDULE_TEST', --使用的调度器名称(Scheduler)
comments =>'insert sysdate into table' --注释
);
END;
/
Job创建完成后可以使用
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS; --查看已存在的Job的名称以及状态
SELECT schedule.schedule_name, schedule.start_date, schedule.end_date FROM DBA_SCHEDULER_SCHEDULES schedule --查看Schedule的名称,开始时间,结束时间
SELECT programs.program_name, programs.program_type FROM DBA_SCHEDULER_PROGRAMS programs --查看Program的名称以及类型
删除Program, Schedule, Job方法:
--删除Job
BEGIN
DBMS_SCHEDULER.DROP_JOB (
JOB_NAME =>'JOBTEST'
);
END;
/
--删除Schedule
BEGIN
DBMS_SCHEDULER.DROP_SCHEDULE (
schedule_name =>'SCHEDULE_TEST' --调度器名字
);
END;
/
--删除Program
BEGIN
DBMS_SCHEDULER.DROP_PROGRAM (
PROGRAM_NAME =>'PROGRAM_TEST'
);
END;
/