用以下语句创建了一个作业,希望每天大概1:50的时候执行存储过程Myproce,但该作业一运行就自动跑起来了,请问这个是怎么回事呢?如何不让其创建作业时就自动跑起来呢?谢谢!
declare job_num number;
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(SYSDATE)+1.84/24,'trunc(sysdate+1)+1.84/24');
commit;
end;
/
作业相关信息如下:
LAST_DATE LAST_SEC THIS_DATE THIS_SEC NEXT_DATE NEXT_SEC TOTAL_TIME INTERVAL WHAT
03-26-2009 11:14:18 11:14:18 03-27-2009 01:50:24 01:50:24 11.00 trunc(sysdate+1)+1.84/24 Myproce;还有一个如果想让该存储过程每月1号和16号执行,这个作业的时间该如何设置呢?
declare job_num number;
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(SYSDATE)+1.84/24,'trunc(sysdate+1)+1.84/24');
commit;
end;
/
作业相关信息如下:
LAST_DATE LAST_SEC THIS_DATE THIS_SEC NEXT_DATE NEXT_SEC TOTAL_TIME INTERVAL WHAT
03-26-2009 11:14:18 11:14:18 03-27-2009 01:50:24 01:50:24 11.00 trunc(sysdate+1)+1.84/24 Myproce;还有一个如果想让该存储过程每月1号和16号执行,这个作业的时间该如何设置呢?
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(SYSDATE+1)+1/24+50/60/24,'trunc(sysdate+1)+1/24+50/60/24');
commit;
end;
/ 第二个问题,如果是Oracle10g,则很简单,用scheduler实现:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'My_job',
job_type => 'STORED_PROCEDURE',
job_action => 'Myproce',
start_date => TRUNC(SYSDATE+1)+1/24+50/60/24,
repeat_interval => 'FREQ=MONTHLY; BYMONTHDAY=1,16; BYHOUR=1; BYMINUTE=50',
enabled => TRUE
);
END;
/如果不是oracle10g,则用两个jobdeclare job_num number;
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1/24+50/60/24,'TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1/24+50/60/24');
commit;
end;
/
declare job_num number;
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+15+1/24+50/60/24,'TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+15+1/24+50/60/24');
commit;
end;
/
declare job_num number;
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1/24+50/60/24,'TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1/24+50/60/24');
commit;
end; 报如下错误:ERROR 位于第 3 行:
ORA-06550: 第 3 行, 第 131 列:
PLS-00103: 出现符号 "MM"在需要下列之一时:
. ( ) , * @ % &
| = - + < / > at in is mod not range rem => ..
<an exponent (**)> <> or != or ~= >= <= <> and or like
between ||
符号 ".在 "MM" 继续之前已插入。
begin
dbms_job.submit(job_num,'Myproce;',TRUNC(ADD_MONTHS(SYSDATE,1),'MM')+1/24+50/60/24,'TRUNC(ADD_MONTHS(SYSDATE,1),''MM'')+1/24+50/60/24');
commit;
end;