Sql 删除早于1个月的行

Sql 删除早于1个月的行,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有一个Oracle表,如果这些行超过1个月,我想删除它们 CREATE TABLE EVENTS( EVENTID INTEGER NOT NULL, SOURCE VARCHAR2(50 ), TYPE VARCHAR2(50 ), EVENT_DATE DATE, DESCRIPTION VARCHAR2(100 ) ) / 另外,我如何删除表总大小的行,例如100 MB?您应该能够执行以下操作 DELETE FROM EVENTS WHERE EVENT_DAT

我有一个Oracle表,如果这些行超过1个月,我想删除它们

CREATE TABLE EVENTS(
  EVENTID INTEGER NOT NULL,
  SOURCE VARCHAR2(50 ),
  TYPE VARCHAR2(50 ),
  EVENT_DATE DATE,
  DESCRIPTION VARCHAR2(100 )
)
/

另外,我如何删除表总大小的行,例如100 MB?

您应该能够执行以下操作

DELETE FROM EVENTS
  WHERE EVENT_DATE < ADD_MONTHS(SYSDATE, -1);
从事件中删除
其中事件日期<添加月份(SYSDATE,-1);
祝你好运

编辑(参见OP下面关于XML的评论) 如果不知道如何获取或使用XML值,很难说,但可能类似于

DELETE FROM EVENTS
  WHERE EVENT_DATE < ADD_MONTHS(SYSDATE, XMLvalue * -1);
从事件中删除
其中事件日期<添加月份(SYSDATE,XMLvalue*-1);
其中XMLvalue是从XML中获得的值


祝你好运。

你有两个截然不同的问题。请找出您的问题并提问。另一种方法是按月对表进行分区,然后根据需要删除最旧的分区。我使用Oracle 11g XE。我认为分区在企业版中是额外许可的?但是没有负值?你说的“使用天数”是什么意思?为什么没有负值?如果你想删除过去发生的事情,你不能不使用负数来表示你想走多远!也许你的意思是你想在之前输入一个要删除的特定日期?如果是这样,请将where子句更改为
where event\u date
,因为我将使用XML配置该值。如果在XML文件中设置值-1,看起来不太好。真的吗?XML中有什么东西看起来不错吗*{;-)为什么-1看起来不好?是什么阻止了您在文件中将值设为正值,并在数据库代码中简单地乘以-1?您可以提出其他替代解决方案吗?