以提交Job的方式执行一个存储过程

119 阅读1分钟
有耗时较长的处理逻辑,写成存储过程,直接调用的话有可能会被某些安全控制系统kill掉。
所以需要提交一个JOB,执行存储过程。
  • 复杂逻辑写在存储过程中
create or replace procedure PROC_TEST is
-- 定义变量
begin
	-- 编写复杂逻辑
end PROC_TEST;
  • 提交Job
declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,
        WHAT => 'PROC_TEST;',	-- 存储过程名
        NEXT_DATE => to_date('20-03-2020 18:23:00','dd-mm-yyyy hh24:mi:ss'), -- 开始执行时间
        INTERVAL => 'trunc(sysdate+50)' -- 下次执行时间:50天后再执行
      );
  commit;
end;
  • 查看刚刚提交的Job
select * from user_jobs;
  • 停止Job
declare
begin 
	dbms_job.broken(241,true); -- Job Id
	commit; 
end;
  • 删除Job
declare
begin  
	dbms_job.remove(241); -- Job Id
	commit; 
end;