请教自动删除的问题

awolf168 2004-11-06 09:48:26
需要根据表a中的time字段,与系统时间比较,三个月以后的信息全部删除,应该怎么实现呢
?
...全文
79 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
awolf168 2004-11-06
  • 打赏
  • 举报
回复
谢谢大家,搞定了
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;
/
结贴去了
lina0814 2004-11-06
  • 打赏
  • 举报
回复
v_sor 应该是游标的名字 而 t_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;
/
awolf168 2004-11-06
  • 打赏
  • 举报
回复
呵呵,快要搞好了
就差时间比较了~~~:)
zmgowin 2004-11-06
  • 打赏
  • 举报
回复
v_sor是隐式申明的游标,这个你可以不用管它
存储过程你可以自己写个,只要能满足你的删除条件就可以了
awolf168 2004-11-06
  • 打赏
  • 举报
回复
报错误
在此上下文中不允许表,视图或序列引用
是什么原因?
awolf168 2004-11-06
  • 打赏
  • 举报
回复
create procedure pro
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是什么意思啊??有没人知道?
awolf168 2004-11-06
  • 打赏
  • 举报
回复
先谢谢,我好好看看~~~~
:)
zmgowin 2004-11-06
  • 打赏
  • 举报
回复
自己改改就可以了
zmgowin 2004-11-06
  • 打赏
  • 举报
回复

主题: 如何写根据时间执行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;
/

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧