獲取系統中建索引的sql

關鍵內容說明:
user_indexes: 用戶基本索引信息;
user_ind_columns: 索引表字段的信息。
這裏將 maxextents 默認設置爲 unlimited 
             pctincrease 默認設置爲 0;

 

v2:改進版
create or replace procedure w_proc_getindexsql(table_name varchar2) is
  v_index_name varchar2(50) := '';
  v_table_name varchar2(50) := table_name;
  v_tablespace varchar2(50) := '';
  v_pctfree    number(18)   := '';
  v_initrans   number(18)   := '';
  v_maxtrans   number(18)   := '';
  v_initial    number(18)   := '';
  v_next       number(18)   := '';
  v_minextents number(18)   := '';
  v_maxextents number(18)   := '';
  v_pctincrease number(18)   := '';
  v_indexcol   varchar2(255) := '';
  v_uniqueness varchar2(30) := '';

  cursor c_index is
   select ind.index_name,
          ind.table_name,
          ind.tablespace_name,
          ind.pct_free,
          ind.ini_trans,
          ind.max_trans,
          ind.initial_extent,
          ind.next_extent,
          ind.min_extents,
          ic.column_name,
          ind.uniqueness
     from user_indexes ind, user_ind_columns ic
    where ic.index_name = ind.index_name
      and ind.table_name = upper(v_table_name);

begin
   open c_index;
   fetch c_index into v_index_name,v_table_name, v_tablespace, v_pctfree, v_initrans, v_maxtrans, v_initial, v_next, v_minextents, v_indexcol, v_uniqueness;
  
   dbms_output.put_line('');
   dbms_output.put_line('');
   dbms_output.put_line('----' || v_table_name);

   while c_index % found loop
     dbms_output.put_line('--v_uniqueness:' || v_uniqueness);
    
     if v_uniqueness = 'UNIQUE' then
       dbms_output.put_line('alter table ' || v_table_name);
       dbms_output.put_line('add constraint ' || v_index_name || ' primary key (' || v_indexcol || ')');
       dbms_output.put_line('using index ');
     elsif v_uniqueness = 'NONUNIQUE' then
       dbms_output.put_line('create index ' || v_index_name);
       dbms_output.put_line(' on ' || v_table_name || '(' || v_indexcol || ')');
     end if;
    
     dbms_output.put_line(' tablespace ' || v_tablespace);
     dbms_output.put_line(' pctfree ' || v_pctfree);
     dbms_output.put_line(' initrans ' || v_initrans);
     dbms_output.put_line(' maxtrans ' || v_maxtrans);
     dbms_output.put_line(' storage (');
     dbms_output.put_line(' initial ' || v_initial/1024 || 'k');
     dbms_output.put_line(' next ' || v_next/1024 || 'k');
     dbms_output.put_line(' minextents ' || v_minextents);
     dbms_output.put_line(' maxextents unlimited ');
     dbms_output.put_line(' pctincrease 0);');
     dbms_output.put_line('');
     fetch c_index into v_index_name,v_table_name, v_tablespace, v_pctfree, v_initrans, v_maxtrans, v_initial, v_next, v_minextents, v_indexcol, v_uniqueness;
   end loop;
  
   close c_index;
end w_proc_getindexsql;

 

create or replace procedure w_proc_getindexsql(table_name varchar2) is
  v_index_name varchar2(50) := '';
  v_table_name varchar2(50) := table_name;
  v_tablespace varchar2(50) := '';
  v_pctfree    number(18)   := '';
  v_initrans   number(18)   := '';
  v_maxtrans   number(18)   := '';
  v_initial    number(18)   := '';
  v_next       number(18)   := '';
  v_minextents number(18)   := '';
  v_maxextents number(18)   := '';
  v_pctincrease number(18)   := '';
  v_indexcol   varchar2(255) := '';

  cursor c_index is
    select ind.index_name,
         ind.table_name,
         ind.tablespace_name,
         ind.pct_free,
         ind.ini_trans,
         ind.max_trans,
         ind.initial_extent,
         ind.next_extent,
         ind.min_extents,
         ic.column_name
    from user_indexes ind, user_ind_columns ic
   where ic.index_name = ind.index_name
   and ind.table_name = upper(v_table_name);

begin
   open c_index;
   fetch c_index into v_index_name,v_table_name, v_tablespace, v_pctfree, v_initrans, v_maxtrans, v_initial, v_next, v_minextents, v_indexcol;
  
   while c_index % found loop        
     dbms_output.put_line('create index ' || v_index_name);
     dbms_output.put_line(' on ' || v_table_name || '(' || v_indexcol || ')');
     dbms_output.put_line(' tablespace ' || v_tablespace);
     dbms_output.put_line(' pctfree ' || v_pctfree);
     dbms_output.put_line(' initrans ' || v_initrans);
     dbms_output.put_line(' maxtrans ' || v_maxtrans);
     dbms_output.put_line(' storage (');
     dbms_output.put_line(' initial ' || v_initial/1024 || 'k');
     dbms_output.put_line(' next ' || v_next/1024 || 'k');
     dbms_output.put_line(' minextents ' || v_minextents);
     dbms_output.put_line(' maxextents unlimited ');
     dbms_output.put_line(' pctincrease 0);');
     fetch c_index into v_index_name,v_table_name, v_tablespace, v_pctfree, v_initrans, v_maxtrans, v_initial, v_next, v_minextents, v_indexcol;
   end loop;
   close c_index;
end w_proc_getindexsql;

 

 


 

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