当前位置:数据库 > Oracle >>

oracle存储过程导出索引

oracle存储过程导出索引
 
1、首先要建立一个directory 
create or replace directory DIR_DUMP as 'd:/index'; 
 
2、执行过程,在路径'd:/index' 下有index.txt文件为导出所有索引的创建语句。 
 
create or replace procedure index_frame 
is 
  type index_name_type is table of user_indexes.index_name%type; 
  v_index_name index_name_type; 
  type index_type_type is table of user_indexes.index_type%type; 
  v_index_type index_type_type; 
  type table_name_type is table of user_indexes.table_name%type; 
  v_table_name table_name_type; 
  type ind_post_cur is ref cursor; 
  ind_post ind_post_cur; 
  v_column_name user_ind_columns.COLUMN_NAME%type; 
  v_column_position user_ind_columns.column_position%type; 
  frame_name UTL_FILE.file_type; 
  v_str clob; 
  s_index_type  user_indexes.index_type%type; 
  status number; 
begin 
  frame_name := UTL_FILE.fopen('DIR_DUMP','index.txt','w'); 
  select index_name,index_type,table_name  bulk collect into v_index_name,v_index_type,v_table_name 
    from user_indexes where index_name not like '%BIN$%'; 
  for i in 1..v_index_name.count loop 
  status :=1; 
  if v_index_type(i) = 'NORMAL' then 
    s_index_type := ''; 
  else s_index_type := v_index_type(i); 
  end if; 
  open  ind_post for  select column_name,column_position   from user_ind_columns 
                       where index_name=upper(v_index_name(i)) 
                      order by column_position asc; 
  v_str := 'create '||s_index_type||' index '||v_index_name(i)||' on '||v_table_name(i)||' ('; 
    loop 
       fetch ind_post into v_column_name,v_column_position;     
       if ind_post%notfound then 
         v_str := v_str||') ;'; 
         exit; 
       elsif status =1 then 
         v_str := v_str||v_column_name; 
         status := 0 ; 
       else 
         v_str := v_str||','||v_column_name; 
       end if; 
    end loop;  
  UTL_FILE.put_line(frame_name,v_str); 
  close ind_post; 
  end loop; 
  UTL_FILE.fclose_all; 
end; 
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,