日期:2014-05-16  浏览次数:20537 次

oracle 使用带参游标删除分区表
在生产环境中会产生大量的数据,而许多数据过了一定时间后就无效了,需要删除

一般可以根据时间来创建分区表,将不同时间的数据放在不同的分区表中,需要清理的时候不需要通过delete语句来删除,而是通过drop分区表的方式,这样速度会非常快

如 日志表 TEST_LOG

1.建立默认的分区 TEST_LOG
2.定时任务每个月创建一个分区表如:TEST_LOG20110809
3.定时任务删除过期分区表:

cursor del_part_table
(table_name in varchar2, part_prefix in varchar2 ,v_num in varchar2)
is
select PARTITION_NAME from user_tab_partitions
where TABLE_NAME=table_name
and PARTITION_NAME like part_prefix||'%' and PARTITION_NAME < part_prefix||to_char(add_months(sysdate,v_num),'YYYYMM');

table_name 指定表名 part_prefix 指定分区表前缀 v_num 表示当前时间和需要删除的月份的差

如:

for row in del_part_table('TEST_LOG','TEST_LOG','-3') loop
    execute immediate 'alter table TEST_LOG
    drop partition '||row.PARTITION_NAME;
end loop;