删除在特定日期上传的数据,但表中没有日期列

时间:2018-01-14 15:17:07

标签: sql oracle sysdate

我正在尝试从Oracle表中删除数据。我今天上传了数据,但没有日期列,因此我无法按此过滤并删除。我必须找到如何获取今天在表中上传的数据,然后按此过滤并删除。

我想要这样的事情:

delete from mytable
where  uploaded_date = trunc(sysdate)

我正在使用Toad。

由于

1 个答案:

答案 0 :(得分:1)

我想你想及时回到yesterday获取你的表格数据。如果是这样,您可以使用Oracle DB的Flashback Table操作,

  • 您的数据库版本至少为10g
  • 您必须已被授予FLASHBACK ANY TABLE系统权限,或者您必须拥有该表的FLASHBACK对象权限。
  • 您必须拥有SELECTINSERTDELETEALTER权限。
  • 撤消撤消表空间中保留的信息必须足够长,以满足指定的目标时间点或SCN FLASHBACK TABLE操作。 (对于此选项,您可以咨询您的DBA)。
  • 要为您发出FLASHBACK TABLE语句的表启用行活动。您可以使用以下语句启用行移动:

    SQL> ALTER TABLE mytable ENABLE ROW MOVEMENT;

  

但如果尚未启用,请不要使用此句来改变   表,因为您的撤消数据通过发出DDL而丢失。在这种情况下   您可以使用 闪回查询 来恢复   select * from mytable as of timestamp timestamp '2018-01-14';

您可以通过发布(今天的日期是2018-01-14 )回到昨天的数据:

  SQL> FLASHBACK TABLE mytable TO TIMESTAMP 
      TO_TIMESTAMP('2018-01-14 00:00:00','YYYY-MM-DD HH:MI:SS') 
      ENABLE TRIGGERS;

如果您的表没有任何触发器,那么您最后可以省略ENABLE TRIGGERS部分(FLASHBACK TABLE操作的默认值是针对要禁用的表上的触发器)。 / p>

  

重要提示:在应用闪回表操作之前,您应该这样做   备份为CREATE TABLE mytable_ AS SELECT * FROM mytable;