declare v_jobnum number; v_job number; begin SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */ dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1'); commit; end; / exit;
declare v_jobnum number; v_job number; begin SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */ dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1'); commit; end; / exit;
写法有点问题 SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;'; if v_jobnum>0 then dbms_job.remove(v_job); end if; 这种写法会把自己本身这个JOB也删除掉,是不是应该把自身排除掉?
v_jobnum number;
v_job number;
begin
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if; /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1'); commit;
end;
/
exit;
v_jobnum number;
v_job number;
begin
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if; /* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1'); commit;
end;
/
exit;
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if; SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;
这种写法会把自己本身这个JOB也删除掉,是不是应该把自身排除掉?
这个JOB在测试库和正式环境很可能是不同的,测试库MAX(JOB)可能是A, 正式环境可能就是取到了本身自己的JOB
从贴图来看,会删除JOB11。如果本身就是11的话,会把自身移除,为什么会没问题?
另外JOB10不用删除吗?如果你的目的是’将当前表的操作日志插入到历史表中并清空‘,为什么要生成多个JOB来处理呢?一个JOB就能实现我想要执行的job是9,所以脚本取的值是MAX(JOB)就会有问题,而测试库上执行的job是11,而恰好11这个job是最大的所以就没有问题?