求教一条定时器的SQL语句。。希望大牛帮忙啊

xuchongya 2011-09-21 05:04:28
我数据库有N条数据,我想以当前时间开始比较,判断超过7天的datatime的数据删除掉,用一个定时器每天定时删除超过7天的数据
...全文
277 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuchongya 2011-09-29
  • 打赏
  • 举报
回复
我主要想知道如何用两个时间比较是否大于7天,是否有那个时间函数可以比较出来
比如delete table where 时间函数(datatime+currentTime)>7
来删除超过当前时间7天的数据
hanzs 2011-09-29
  • 打赏
  • 举报
回复

--用这个
select * from tbl_alarminfo where trunc(to_date(alarmoccurtime,'yyyymmdd') - to_date('20100929','yyyymmdd')) > 7;
--如果时间中没有时分秒,那减下来的就是整数天,可以不要trunc。如果有时分秒就要trunc了,而且to_date后的时间格式就要写成'yyyymmddhh24miss'
leech125 2011-09-29
  • 打赏
  • 举报
回复
delete from table where test_date> trunc(sysdate,'DD')-7
leech125 2011-09-29
  • 打赏
  • 举报
回复
delete table where test_date> trunc(sysdate,'DD')-1
xuchongya 2011-09-29
  • 打赏
  • 举报
回复
我本地没有ORCALE,试不了,postgres执行了这条select * from tbl_alarminfo where alarmoccurtime trunc((to_date(alarmoccurtime) - to_date(20100929)))>7有问题
hanzs 2011-09-29
  • 打赏
  • 举报
回复
你没试过怎么知道不可以呢?

可以想减的,减下来的结果单位是天,不满一天的会有小数,所以要加上trunc函数取整数
xuchongya 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hanzs 的回复:]
两个时间类型的值减一下就可以了,比如:
delete from table where trunc(currentTime - dateTime) > 7
currentTime,dateTime这两字段要都是date型的,如果不是就用to_date函数转为date型的
[/Quote]
delete demo where adddate(to_date(adddate) -to_date(20110927))>7
orcale可以这么将日期相减吗??????
hanzs 2011-09-29
  • 打赏
  • 举报
回复
两个时间类型的值减一下就可以了,比如:
delete from table where trunc(currentTime - dateTime) > 7
currentTime,dateTime这两字段要都是date型的,如果不是就用to_date函数转为date型的
xuchongya 2011-09-29
  • 打赏
  • 举报
回复
没人知道么?
雨天要吃饭 2011-09-22
  • 打赏
  • 举报
回复
mysql 用event时间调度就可以实现的。

类似oracle的job功能
swordsman 2011-09-22
  • 打赏
  • 举报
回复
LZ还不结帖给分呀。
lxyzxq2008 2011-09-21
  • 打赏
  • 举报
回复
做删除用的存储过程你肯定会写吧,
现在就是写一个能定时执行你的存储过程的东东就行了呗!
OK,这个东东就是job了!
--创建你的存储过程
create or replace procedure DELTEST

--创建job,没7天执行一次你的存储过程
declare job1 number;
begin
dbms_job.submit(job1,'DELTEST;','sysdate+7');
COMMIT;
end;
/
waitdream 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 waitdream 的回复:]

Oracle不是有个闪回的功能么~
10G之后的好像是默认开这个功能的哦~
你可以进到EM里面,在表管理的那一块,有相应的按钮的~
[/Quote]

= = 回错贴!
waitdream 2011-09-21
  • 打赏
  • 举报
回复
Oracle不是有个闪回的功能么~
10G之后的好像是默认开这个功能的哦~
你可以进到EM里面,在表管理的那一块,有相应的按钮的~
IT职场成长课 2011-09-21
  • 打赏
  • 举报
回复

begin
sys.dbms_job.submit(job => :job,
what => 'delete tab where datatime < sysdate - 7;', /*这个根据你要删除的条件写*/
next_date => to_date('21-09-2011 17:20:11', 'dd-mm-yyyy hh24:mi:ss'), /*这个是你第一次要执行的时间,你可以根据你的要求写*/
interval => 'TRUNC(SYSDATE)+1'); /*这个是执行时间间隔,现在这个是每天凌晨0点开始执行,你可以根据你实际情况修改*/
commit;
end;
/
xuchongya 2011-09-21
  • 打赏
  • 举报
回复
我就是不怎么会啊。。。
求请教
cosio 2011-09-21
  • 打赏
  • 举报
回复
首先创建一存储过程

然后在定义一JOB来执行就OK!
IT职场成长课 2011-09-21
  • 打赏
  • 举报
回复
用job就可以

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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