以上存储过程每月3号定期执行declare job1 number; begin --每月3号午夜12点执行MYPROC dbms_job.submit(job1,'MYPROC;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 3)'); commit; end; 使用另外一个存储过程验证MYPROC是否执行PASUPPLYPROC.prccreate or replace procedure PASUPPLYPROC is isnull integer; tmp_str varchar2(100); begin --取得本月执行myproc次数 if isnull is null then select count(*) into isnull from oper_proc_log where oper_date>=to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd'); end if; --无本月执行记录则立即执行myproc if isnull=0 then tmp_str:='begin myproc; end;'; execute immediate tmp_str; commit; end if; end PASUPPLYPROC;
可以先查看你的数据库版本: Select version FROM ProdUCt_component_version Where SUBSTR(PRODUCT,1,6)='Oracle'; 如果是10以上可以到oem中直接查看和管理。比较方便。 10g以下通过toad工具或pl/sql工具都可以查看或管理。 你先说你用的是什么工具吧
每晚零点执行的job示例:DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'declare i integer:=7; j integer:=0; v_url varchar(100):=null; begin for i in 7..13 loop for j in 0..23 loop v_url := replace(to_char(trunc(sysdate),''yyyyMMdd'')||to_char(j,''00'')||''.wmv'','' '',''''); insert into PUB_TVLISTENER (Listen_Date,Listen_Time,LISTEN_CHANNELID,Listen_url) values (to_date((to_char(trunc(sysdate),''yyyy-MM-dd'')),''yyyy-MM-dd''),j,i,v_url); end loop; end loop; commit; end;' ,next_date => to_date('21-01-2009 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; /
begin
--每月3号午夜12点执行MYPROC
dbms_job.submit(job1,'MYPROC;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 3)');
commit;
end;
使用另外一个存储过程验证MYPROC是否执行PASUPPLYPROC.prccreate or replace procedure PASUPPLYPROC is
isnull integer;
tmp_str varchar2(100);
begin
--取得本月执行myproc次数
if isnull is null then
select count(*) into isnull from oper_proc_log
where oper_date>=to_date(to_char(add_months(last_day(sysdate) +1,-1), 'yyyymmdd'),'yyyymmdd');
end if;
--无本月执行记录则立即执行myproc
if isnull=0 then
tmp_str:='begin myproc; end;';
execute immediate tmp_str;
commit;
end if;
end PASUPPLYPROC;
Select version FROM ProdUCt_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
如果是10以上可以到oem中直接查看和管理。比较方便。
10g以下通过toad工具或pl/sql工具都可以查看或管理。
你先说你用的是什么工具吧
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'declare
i integer:=7;
j integer:=0;
v_url varchar(100):=null;
begin
for i in 7..13 loop
for j in 0..23 loop
v_url := replace(to_char(trunc(sysdate),''yyyyMMdd'')||to_char(j,''00'')||''.wmv'','' '','''');
insert into PUB_TVLISTENER (Listen_Date,Listen_Time,LISTEN_CHANNELID,Listen_url) values (to_date((to_char(trunc(sysdate),''yyyy-MM-dd'')),''yyyy-MM-dd''),j,i,v_url);
end loop;
end loop;
commit;
end;'
,next_date => to_date('21-01-2009 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;
/
你那两层循环是干吗的?