一個schedule的小例子

測試環境,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 

 

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