我需要在没有任何唯一ID的非规范化表上执行删除操作(首先使用最旧的数据)。我们正在考虑将日期作为参数 在决定最旧的数据时。但是对于每个日期,它们将是600K记录。并且由于表非常大,删除操作将分批完成(Loop with rownum) 我使用了下面的查询,但是这个错误是因为“数据操作操作在此视图上不合法”。但我确信temp是表的对象类型。
delete from (Select A.*,rownum as rn from (select * from temp order by date) A) B where B.rn<10
请让我知道任何其他建议。
感谢Kifinity你的解决方案有效,但现在我很困惑如何使其工作删除大量的记录..我有大约1000万条记录,需要批量删除它们。提前谢谢。
答案 0 :(得分:2)
在您的陈述中,delete from
之后的所有内容都是内联视图。您无法从内联视图中删除;你的陈述必须是delete from TABLE
,例如
delete from temp
where rowid in (select rowid as rid
from (select * from temp order by date)
where rownum < 10)
编辑:根据要求,这是一个PL / SQL循环的示例。
begin
loop
delete from temp
where rowid in (select rowid as rid
from (select * from temp order by date)
where rownum < 1000);
if SQL%ROWCOUNT = 0 then exit; end if;
end loop;
end;
/