主题: 如何写根据时间执行JOB?
假设有一个存储过程p_test,每20分钟执行一次
解答:
1、把init<sid>.ora中如下两个参数打开
JOB_QUEUE_INTERVAL=60
JOB_QUEUE_PROCESSES=4
job_queue_keep_connections=true 然后重启一个库,如果原来已经打开了则不用这步了
2、示例,以下由sqlplus 来执行,具体参照一下相关的文档
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,
'p_test;'
SYSDATE,'SYSDATE + 1/72');
commit;
END;DBMS_JOB.SUBMIT(:jobno,//job号
'your_procedure;',//要执行的过程
trunc(sysdate)+1/24,//下次执行时间
'trunc(sysdate)+1/24+1'//每次间隔时间
);
删除job:dbms_job.remove(jobno);
修改job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',
SYSDATE, 'SYSDATE + 1/720');
commit;
end;
/
解决方案 »
- sql子查询问题,求大神解答
- 这句sql应该怎么写?
- oracle817的control文件损坏了,现在启动不了,如何恢复
- 求助一个有关update的问题
- ORACLE的存储过程中,可以使用生成XML语句的函数么?例如XMLELEMENT,我在ORACLE816中无法通过,该如何?
- 一个存储过程的问题,急,在线等!!
- 服务器上安装了远程服务端后,oracle出现问题-------------在线等待(急)
- 在用TOAD调试Oracle存储过程时,遇到handler问题,怎么解决
- 购买几套软件,软件的市场价格是多少?
- 关于Oracle Developer,求助
- 关于在PL/SQL读写文件的问题。(在线等待)
- 事务处理问题?
as
cursor t_sor is
select * from table_name;
begin
for v_sor in t_sor loop
if trunc(v_sor.dtime)=trunc(sysdate) then
update table_name set nflag=0 where id=v_sor.id;
end if;
end loop;
commit;
end;
/
declare
jobno number;
begin
dbms_job.submit(jobno,'pro;',sysdate,'trunc(sysdate)+1');
commit;
end;
/
我看到上面相关例子,但不理解v_sor是什么意思啊??有没人知道?
存储过程你可以自己写个,只要能满足你的删除条件就可以了
Create Procedure pr_Delete
as
Uid a.id%type;
Utime a.time%type;Create Cursor Temp_List is
select id,time From a;
Begin
Do Loop For eatch Temp_List Into
Uid,
Utime;
Exit When Temp_List%NotFound;
if trunc(Utime)=trunc(sysdate - 30) then
Delete a Where a.id = Uid;
Commit;
end if;
End Loop;
End;
/
my writed procedures is:
create procedure updatesm
as
cursor t_sor is
select * from nation.smsend;
begin
for v_sor in t_sor loop
if to_date(trunc(v_sor.creatime))+90<to_date(trunc(sysdate)) then
update nation.smsend set valid='0' where nid=v_sor.nid;
end if;
end loop;
--dbms_output.put_line(to_date(trunc(sysdate))+1);
commit;
end;
/
create procedure deletesm
as
cursor t_sor is
select * from nation.smsend;
begin
for v_sor in t_sor loop
if to_date(trunc(v_sor.creatime))+180<to_date(trunc(sysdate)) then
delete from nation.smsend where nid=v_sor.nid;
end if;
end loop;
commit;
end;
/
结贴去了