测试环境,RDBMS 11.2.0.4
-- 创建测试表
conn apps/oracle
create table t_schedule(t1 date);
APPS@test>create table t_schedule(t1 date);
Table created.
APPS@test>
-- 创建存储过程,向t_scheduler表中插入数据
create or replace procedure p_t_schedule is
begin
insert into t_schedule values(sysdate);
commit;
end p_t_schedule;
APPS@test>create or replace procedure p_t_schedule is
2 begin
3 insert into t_schedule values(sysdate);
4 commit;
5 end p_t_schedule;
6 /
Procedure created.
APPS@test>
--创建schedule,在schedule中定义schedule名称,开始时间,调用间隔等参数
begin
-- create_schedule
dbms_scheduler.create_schedule(schedule_name => 'schedule_test',
start_date => to_date('31-12-2019 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
repeat_interval => 'Freq=Minutely;Interval=10',
end_date => to_date(null),
comments => 'TEST schedule');
end;
APPS@test>begin
2 -- create_schedule
3 dbms_scheduler.create_schedule(schedule_name => 'schedule_test',
4 start_date => to_date('31-12-2019 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
5 repeat_interval => 'Freq=Minutely;Interval=10',
6 end_date => to_date(null),
7 comments => 'TEST schedule');
8 end;
9 /
PL/SQL procedure successfully completed.
-- 创建program
begin
-- create_program
dbms_scheduler.create_program(program_name => 'program_test',
program_type => 'PLSQL_BLOCK',
program_action => 'BEGIN p_t_schedule; END;',
number_of_arguments => 0,
enabled => TRUE,
comments => 'test program');
end;
APPS@test>begin
2 -- create_program
3 dbms_scheduler.create_program(program_name => 'program_test',
4 program_type => 'PLSQL_BLOCK',
5 program_action => 'BEGIN p_t_schedule; END;',
6 number_of_arguments => 0,
7 enabled => TRUE,
8 comments => 'test program');
9 end;
10 /
PL/SQL procedure successfully completed.
APPS@test>
-- 创建job
begin
-- create_job
dbms_scheduler.create_job(job_name => 'job_test_schedule',
program_name => 'program_test',
schedule_name => 'schedule_test',
job_class => 'DEFAULT_JOB_CLASS',
enabled => true,
auto_drop => true,
comments => 'TEST procedure');
end;
APPS@test>begin
2 -- create_job
3 dbms_scheduler.create_job(job_name => 'job_test_schedule',
4 program_name => 'program_test',
5 schedule_name => 'schedule_test',
6 job_class => 'DEFAULT_JOB_CLASS',
7 enabled => true,
8 auto_drop => true,
9 comments => 'TEST procedure');
10 end;
11 /
PL/SQL procedure successfully completed.
APPS@test>
-- 执行job
begin
-- Call the procedure
dbms_scheduler.run_job(job_name => 'job_test_schedule',
use_current_session => false);
end;
APPS@test>begin
2 -- Call the procedure
3 dbms_scheduler.run_job(job_name => 'job_test_schedule',
4 use_current_session => false);
5 end;
6 /
PL/SQL procedure successfully completed.
APPS@test>
-- 查询数据
select * from t_schedule;
APPS@test>select * from t_schedule;
T1
-------------------
2019-12-31 16:46:10
1 row selected.
APPS@test>
APPS@test>select job_name,enabled,state from user_scheduler_jobs;
JOB_NAME ENABLED
------------------------------------------------------------ ----------
STATE
------------------------------
JOB_TEST_SCHEDULE TRUE
SCHEDULED
1 row selected.
APPS@test>
-- 禁用job
begin
dbms_scheduler.disable('job_test_schedule');
end;
select job_name,enabled,state from user_scheduler_jobs;
-- 启用job
begin
dbms_scheduler.enable('job_test_schedule');
end;
select job_name,enabled,state from user_scheduler_jobs;
-- 删除job
begin
dbms_scheduler.drop_job('job_test_schedule');
end;
select job_name,enabled,state from user_scheduler_jobs;
-- 还可以通过视图查看schedule运行情况
select * from user_scheduler_job_run_details
select * from user_scheduler_job_log
select * from user_scheduler_running_jobs
END