我想运行一个调度程序,它运行一个触发器,它应该是自动清除的数据,这是超过30days.so我们已经有一个触发器如下,我们需要的东西来调度该触发器自动一旦它达到30天。在这里,天应该是可配置的
下面是我为此创建的触发器。
CREATE TRIGGER sampleTrigger
ON database1.dbo.table1
FOR DELETE
AS
DELETE FROM database1.dbo.table1
WHERE date < DATEADD(day, -30, GETDATE())
GO
还有,上面的触发器出了问题,因为现在我得到了以下错误
ORA-04071:缺少“之前”、“之后”或“代替”。
有人能请帮助我在这上面的触发器什么错误,我怎么能使这自动使用调度程序,将清理30天前的数据从一个表
3条答案
按热度按时间4c8rllxm1#
正如所评论的,trigger不是一个合适的 * 工具 *-将它转换为一个存储过程(使用Oracle的语法;无法判断您发布的代码属于哪个数据库),然后安排一个每月运行该过程的作业。
另外,请注意,向后删除“30天”可能会导致问题,因为并非所有日期都有30天;也许您更愿意使用“1个月”。
示例表:
删除超过1个月的行的过程;如果您确实需要30天,请将
where
子句修改为< trunc(sysdate) - 30
:让我们计划一个作业:
通过查询
user_scheduler_jobs
查看作业信息,例如:我们不会等到下个月,所以我将手动运行它:
结果:
如果您不再需要该作业,请将其删除:
iaqfqrcu2#
触发器不用于调度。请根据需要使用DBMS_SCHEDULER。
guz6ccqo3#
您正在使用的T-sql语法(由MS SQLserver使用)不适用于Oracle。
如果您使用的是Oracle数据库,则使用Oracle语法创建触发器:
Oracle中的触发器可以设置为INSERT、UPDATE、DELETE或LOGON、LOGOFF等数据库操作。尽管如此,正如其他人指出的那样,触发器在这里对您没有帮助。
在您的情况下,您需要根据某个列值截断表,因此最好的选择是设置一个dbms调度程序作业,以运行sql脚本/plsql proc并清除表中较旧的数据。