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的主要内容,如果未能解决你的问题,请参考以下文章