oracle分區表的創建,數據轉移與查詢

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 = '表名';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章