您的位置:首页 > 数据库 > Oracle

Oracle 高效清理数据

2016-09-08 14:55 274 查看
declare
-- Local variables here
CURSOR CUR1 IS
SELECT ec.ROWID
from epcisbase.employee_channel ec, epcisbase.sas_employee t
where t.employee_code = ec.employee_code
and t.employee_channel in ('DS')
and ec.business_source_code = '2'
and ec.business_source_detail_code = '1'
and ec.channel_source_code = 'J'
and ec.channel_source_detail_code = 'H';

V_ROWID_TAB DBMS_SQL.UROWID_TABLE;

V_LIMIT   PLS_INTEGER := 5000; -->定义了一个变量来作为LIMIT的值
V_COUNTER PLS_INTEGER := 0;
begin
OPEN CUR1;
LOOP
FETCH CUR1 BULK COLLECT
INTO V_ROWID_TAB -->FETCH时使用了BULK COLLECT子句
LIMIT V_LIMIT; -->使用LIMIT子句限制提取数据量

EXIT WHEN V_ROWID_TAB.COUNT = 0; -->注意此时游标退出使用了TMP_TAB.COUNT,而不是CUR1%NOTFOUND
V_COUNTER := V_COUNTER + 1; -->记录使用LIMIT之后FETCH的次数

if V_ROWID_TAB.count > 0 then
forall j in V_ROWID_TAB.FIRST .. V_ROWID_TAB.LAST
delete epcisbase.employee_channel ec
where ROWID = V_ROWID_TAB(j);
end if;
commit;
END LOOP;

CLOSE CUR1;
end;
/


另可参考:http://blog.chinaunix.net/uid-411974-id-88377.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: