create or replace procedure pro_table_partition is
v_limit PLS_INTEGER := 2000;
v_counter PLS_INTEGER := 0;
CURSOR cur IS
SELECT * FROM CASEDOCKDATA;
TYPE rec IS TABLE OF CASEDOCKDATA%ROWTYPE;
recs rec;
str_sql varchar2(200);
begin
-- 創建分區表(權限不夠,暫時不能用這種方式創建表)
execute immediate 'create table casedockdatap partition by RANGE(reporttime) INTERVAL (numtoyminterval(1,''year'')) (partition part_t01 values less than(to_date(''2018-01-01'', ''yyyy-mm-dd''))) as select * from casedockdata where 1=0;';
-- 批量插入
OPEN cur;
LOOP
FETCH cur BULK COLLECT
INTO recs LIMIT v_limit;
EXIT WHEN recs.COUNT = 0;
v_counter := v_counter + 1;
FOR i IN recs.FIRST .. recs.LAST LOOP
insert into casedockdatap values recs (i);
commit;
END LOOP;
END LOOP;
CLOSE cur;
-- 表重命名
str_sql := 'RENAME CASEDOCKDATA TO CASEDOCKDATA20200512';
execute immediate str_sql;
str_sql := 'RENAME CASEDOCKDATAP TO CASEDOCKDATA';
execute immediate str_sql;
end pro_table_partition;
查詢分區表
select table_owner,table_name,partition_name,high_value,tablespace_name,interval
from dba_tab_partitions where table_name = '表名';