您的位置:首页 > 数据库

获取系统中建索引的sql

2007-12-12 12:27 190 查看
关键内容说明:
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: