请教一个关于循环的问题,删除数据
我有一张有数千万数据的大表,现在想删掉一些没用的历史数据,如果用常规删法的话,会很慢,如:
delete from table_a t where t.id<5000000;
我的表有5个字段,其中id有索引。
删了两个小时,也没有完成。
考虑了一下,想用一个过程,让服务器自己空闲的时候,自己去删:
create or replace procedure self_procedure is
begin
for v in 4805000000 .. 4810000000 loop
delete from SYS2SYN_DATA_DETAIL t where t.master_id = v;
commit;
end loop;
end;
这样没似乎可以实现,但是每次只删除一条,不知道会删到什么时候,而且磁盘操作似乎有些频繁。
于是想一次多删除一些:
create or replace procedure self_procedure_muti is
begin
for v in 4805000000 .. 4810000000 loop
delete from SYS2SYN_DATA_DETAIL t where t.master_id < v;
v:=v+1000;
commit;
end loop;
end;
可是这个过程报错了,“表达式v不能用作赋值目标”。
请问,各位有什么好的办法没有?