如何在Oracle中使用定时器执行存储过程

3

如果一张表中的数据存在一个小时,我需要清除所有记录。为了确定开始时间,我有一个名为“StartTime”的列,其数据类型为“date”。我认为我需要一个计时器来完成这个任务。

在Oracle中,我该如何做?

4个回答

6
根据您的具体需求,我建议使用视图来仅在查询时显示有效行。这将使其看起来好像只有最近一小时的记录可用。这也意味着您无需在创建后精确删除一小时的行。
然后,为了删除行,我会考虑使用DBMS_JOB或DBMS_SCHEDULER来删除行,就像其他答案中建议的那样。
请记住,仅因为您的要求是在一小时后清除表中的行,并不意味着您真正需要删除它们,您可以通过视图来实现无法查询它们的目的。

1
+1 优秀的建议。有时用户会说“1小时后记录被删除”,但他们真正想表达的是“1小时后记录不再出现在屏幕上”。 - Jeffrey Kemp

4

针对哪个版本的Oracle?

对于版本v7.3.4到9i,请使用DBMS_JOB来安排任务。对于10g+,您需要使用DBMS_SCHEDULER。我不清楚您希望/需要多久运行一次此任务...


3
您可以使用DBMS_SCHEDULER在Oracle 10G及以上版本中创建定时作业。
如果您非常细心,可以将调用您的过程的作业计划为每1分钟运行一次,以便在第60分钟到期时立即清除数据。
有关如何在Oracle 10G中设置/安排作业的示例,请参阅this link

2

需求并不十分明确。

这是一个你只需运行一次的任务/程序,它将删除已存在超过一小时的记录吗?如果是这样,你可以使用...

delete from <table_name>
where StartTime < (sysdate-1/24);
commit;

如果您需要经常清除记录,则需要将其安排为作业。频率取决于您希望删除记录的频率。
您试图解决什么业务问题?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接