3

我编写了一个 API 包。它有 GET_INFO 过程。我希望此过程每 20 分钟在后台执行一次。我明白我应该用 dbms_scheduler 做什么。但总的来说,我不明白在哪里注册它们。我将不胜感激这个例子或你的帮助)

我写了这样的代码,但我不知道在哪里使用它:

BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name = 'My_Job',

job_type = 'STORED_PROCEDURE',

job_action = 'INSERT INTO TEST2(UPDATEDAT)

VALUES (sysdate);

END;',

start_date = 'systimestamp',

repeat_interval = 'FREQ=SECONDLY;INTERVAL=5',

end_date = null,

auto_drop = FALSE,

comments = 'My new job');

END;

这是我的代码,我不知道在哪里存储它。

4

1 回答 1

1

正如作业类型所暗示的那样,您需要创建一个过程,例如

create or replace procedure Ins_Test2 is
begin
  insert into Test2(updatedat) values(sysdate);
  commit;
end;

然后通过创建调度程序

begin
  dbms_scheduler.create_job (
     job_name           =>  'My_Job',
     job_type           =>  'STORED_PROCEDURE',
     job_action         =>  'Ins_Test2',
     start_date         =>  systimestamp, 
     repeat_interval    =>  'freq=minutely; interval = 20; byday=MON,TUE,WED,THU,FRI;',
     enabled            =>  true,
     comments           => 'My new job'
  );
end;

我在哪里添加

byday=MON,TUE,WED,THU,FRI;如果您想在工作日内运行调度程序,作为额外的指导(如果您愿意,可以省略该部分)。

systimestamp摆脱引号) start_date 可能会替换为即将到来的时间信息,例如start_date => '13-FEB-20 2.00.00PM Asia/Istanbul'

就我而言。

然后列出创建的调度程序

select job_name, next_run_date                           
  from dba_scheduler_jobs j;

目前正在运行的

select * 
  from user_scheduler_job_log l
 order by l.log_date desc;

并通过

begin
  dbms_scheduler.drop_job( job_name =>  'My_Job' );
end;
于 2020-02-13T10:18:01.087 回答