首页 > 数据库 > Oracle > 通过rowid切片对大表进行删除修改操作
|
select 'where rowid between ''' ||
sys.dbms_rowid.rowid_create(1, d.oid, c.fid1, c.bid1, 0) ||
''' and ''' ||
sys.dbms_rowid.rowid_create(1, d.oid, c.fid2, c.bid2, 9999) || '''' || ';'
from (select distinct b.rn,
first_value(a.fid) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) fid1,
last_value(a.fid) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) fid2,
first_value(decode(sign(range2 - range1),
1,
a.bid +
((b.rn - a.range1) * a.chunks1),
a.bid)) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) bid1,
last_value(decode(sign(range2 - range1),
1,
a.bid +
((b.rn - a.range1 + 1) * a.chunks1) - 1,
(a.bid + a.blocks - 1))) over(partition by b.rn order by a.fid, a.bid rows between unbounded preceding and unbounded following) bid2
from (select fid,
bid,
blocks,
chunks1,
trunc((sum2 - blocks + 1 - 0.1) / chunks1) range1,
trunc((sum2 - 0.1) / chunks1) range2
from (select relative_fno fid,
block_id bid,
blocks,
sum(blocks) over() sum1,
trunc((sum(blocks) over()) / &&rowid_ranges) chunks1,
sum(blocks) over(order by relative_fno, block_id) sum2
from dba_extents
where segment_name = upper('&&segment_name')
and owner = upper('&&owner'))
where sum1 > &&rowid_ranges) a,
(select rownum - 1 rn
from dual
connect by level <= &&rowid_ranges) b
where b.rn between a.range1 and a.range2) c,
(select max(data_object_id) oid
from dba_objects
where object_name = upper('&&segment_name')
and owner = upper('&&owner')
and data_object_id is not null) d;
|
|
'WHEREROWIDBETWEEN'''||SYS.DBMS_ROWID.ROWID_CREATE(1,D.OID,C.FID1,
------------------------------------------------------------------ where rowid between 'AAASSdAAEAAAAIIAAA' and 'AAASSdAAEAAAALqCcP'; where rowid between 'AAASSdAAEAAAALrAAA' and 'AAASSdAAEAAAANyCcP'; where rowid between 'AAASSdAAEAAAANzAAA' and 'AAASSdAAEAAAAPyCcP'; where rowid between 'AAASSdAAEAAAAPzAAA' and 'AAASSdAAEAAAARyCcP'; where rowid between 'AAASSdAAEAAAARzAAA' and 'AAASSdAAEAAAATyCcP'; where rowid between 'AAASSdAAEAAAATzAAA' and 'AAASSdAAEAAAAVyCcP'; where rowid between 'AAASSdAAEAAAAVzAAA' and 'AAASSdAAEAAAAXyCcP'; where rowid between 'AAASSdAAEAAAAXzAAA' and 'AAASSdAAEAAAAZyCcP'; where rowid between 'AAASSdAAEAAAAZzAAA' and 'AAASSdAAEAAAAbyCcP'; where rowid between 'AAASSdAAEAAAAbzAAA' and 'AAASSdAAEAAAAdlCcP'; |
|
select 'where rowid >= ''' || rid || ''' and rowid < ''' ||
lead(rid, 1, rid) over(order by rid) || ''';'
from (select rn, rid
from (select rownum rn, rowid rid, count(*) over() total_rows
from scott.test 带上where条件
order by rowid)
where rn in (select trunc(&&total_rows / level)
from dual
connect by level <= &&level
union
select 1 from dual));
|
|
'WHEREROWID>='''||RID||'''ANDROWID<'''||LEAD(RID,1,RID)OVER(ORDERBYRID
----------------------------------------------------------------------
where rowid >= 'AAASSdAAEAAAAILAAA' and rowid < 'AAASSdAAEAAAAJuAAB';
where rowid >= 'AAASSdAAEAAAAJuAAB' and rowid < 'AAASSdAAEAAAAJ5AAm';
where rowid >= 'AAASSdAAEAAAAJ5AAm' and rowid < 'AAASSdAAEAAAAKGAA2';
where rowid >= 'AAASSdAAEAAAAKGAA2' and rowid < 'AAASSdAAEAAAAMRAAU';
where rowid >= 'AAASSdAAEAAAAMRAAU' and rowid < 'AAASSdAAEAAAAMoAAq';
where rowid >= 'AAASSdAAEAAAAMoAAq' and rowid < 'AAASSdAAEAAAANKAAo';
where rowid >= 'AAASSdAAEAAAANKAAo' and rowid < 'AAASSdAAEAAAAOCAAb';
where rowid >= 'AAASSdAAEAAAAOCAAb' and rowid < 'AAASSdAAEAAAAPbAAS';
where rowid >= 'AAASSdAAEAAAAPbAAS' and rowid < 'AAASSdAAEAAAASOAA6';
where rowid >= 'AAASSdAAEAAAASOAA6' and rowid < 'AAASSdAAEAAAAaiAAE';
where rowid >= 'AAASSdAAEAAAAaiAAE' and rowid < 'AAASSdAAEAAAAaiAAE'; ---最后一个ROWID 需要改一下,把<改写为<=
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29953799/viewspace-1994932/ ,如需转载,请注明出处,否则将追究法律责任。