oracle中如何创建一个job

发布网友

我来回答

5个回答

热心网友

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

现为你写的,直接在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;

热心网友

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

热心网友


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

热心网友

以下是建立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;
/

热心网友

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权限

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com