oracle中如何创建一个job

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中如何创建一个job相关的知识,希望对你有一定的参考价值。

存储过程已经编写好,需要在每天的凌晨1点执行这个存储过程,我用的是PL/SQL Developer,是在PL/SQL Developer哪个窗口建立job,如何建立job,如何执行job,如何删除job

将下面的存储过程名称换成实际的存储过程名称,就可以实现您要的功能的,

现为你写的,直接在pl/sql dev里面执行就行了,有啥问题再联系我。

上面一段是删除job,后面的是建立job,我写了判断语句,可以随意执行

参考oracle的 dbms_job包。

 

---------------------华丽丽的分割线----------------------------

DECLARE 

  i_count number;

  job_num number;

BEGIN 

  select count(job) into i_count from user_jobs where upper(what)='存储过程名称;';

  if i_count>0 then

     select job into job_num from user_jobs where upper(what)='存储过程名称;';

     dbms_job.remove(job_num);

  end if; 

END;

/

commit;

DECLARE X NUMBER;

BEGIN

  DBMS_JOB.SUBMIT

    ( job      => X

    ,what      => '存储过程名称;'

    ,next_date => to_date(to_char(sysdate+1,'yyyy-mm-dd')||' 01:00:00','yyyy-mm-dd hh24:mi:ss')

    ,interval  => 'SYSDATE+1'

    ,no_parse  => TRUE

    );

END;

/

commit;

参考技术A 对于DBA来说,数据库Job再熟悉不过了,因为经常要数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提炼,或做数据库的性能优化,包括重建索引等等的工作。
job参数是由Submit()过程返回的binary_ineger,这个值用来唯一标识一个工作;
what参数是将被执行的PL/SQL代码块;
next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;
interval参数何时这个工作将被重执行。
其中Interval这个值是决定Job何时,被重新执行的关键。
参考技术B


什么也甭说了 上图。你说的操作都在图里。自己玩把。

参考技术C 以下是建立JOB的语句。自己慢慢理解。
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'KTHIS.P_REPAIR_VISITS_MK(TO_CHAR(SYSDATE,''yyyyMM''));'
,next_date => to_date('01.01.4000 00:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
参考技术D variable jobno number;
begin
dbms_job.submit(job => :jobno,
what => '过程名;',
next_date => trunc(sysdate,'dd')+1+1/24,
interval => 'trunc(sysdate,''dd'')+1+1/24'
);
commit;
end;
/

select job from dba_jobs where what like '%过程名%';
--删除job
exec dbms_job.remove(job);
/
注意权限问题,有可能你的用户没有 drop database link 。create database link权限

如何在 oracle 中删除计划的作业

【中文标题】如何在 oracle 中删除计划的作业【英文标题】:How to drop a scheduled job in oracle 【发布时间】:2016-05-26 10:22:29 【问题描述】:

我创建了一个名为 ENTRY_TIME

的作业
BEGIN
      DBMS_SCHEDULER.CREATE_JOB (
       job_name           =>  'ENTRY_TIME',
       job_type           =>  'STORED_PROCEDURE',
       job_action         =>  'PK_ENTRY_TIME.PROC_ENTRY_TIME',
       start_date         =>  '24-MAY-16 07.00.00 AM America/Chicago',
       repeat_interval    =>  'FREQ=DAILY',
       end_date           =>  '20-NOV-99 07.00.00 AM America/Chicago',
       auto_drop          =>   FALSE,
      comments           =>  'My new job');
    END;
    /

现在我想放弃这个工作。应该使用什么查询来永久放弃这个工作Entry_time

【问题讨论】:

你试过dbms_scheduler.drop_job吗?似乎是一个不错的起点…… 【参考方案1】:
BEGIN
  dbms_scheduler.drop_job(job_name => 'ENTRY_TIME');
END;
/

【讨论】:

以上是关于oracle中如何创建一个job的主要内容,如果未能解决你的问题,请参考以下文章

如何在ORACLE下创建JOB,并且赋予ID号?

如何在 oracle 中删除计划的作业

oracle数据库创建的job不自动执行

ORACLE如何停止一个JOB

ORACLE的Job是不是有日志文件,如果有如何查看ORACLE 的Job的日志?

如何查看oracle数据库中的job执行了多长时间