Oracle自动生成普通索引的创建脚本

Oracle自动生成普通索引的创建脚本

要整理所有的普通索引创建脚本,不包括分区索引,分区组合索引。
按dba_indexes ,dba_ind_columns 两个索引字典表,生成创建索引SQL 。
脚本如下:

declare 
  -- 自动生成普通索引的创建脚本,不包括分区索引,分区组合索引
  sqltext varchar2(2000);
  owner_name varchar2(20); -- 用户owner名
  tb_index varchar2(20);  -- 索引表空间名
  
begin
   execute immediate 'alter session enable parallel dml';
   owner_name := 'TEST' ;
   tb_index := 'tb_ind_test';
   
    -- 重建普通索引,不包括分区索引
    for cur_index in (select t.index_name,t.table_name from dba_indexes t where t.owner=owner_name) loop
      
      -- 创建索引名,表名,左括号
      sqltext := 'create index ' || cur_index.index_name ||  ' on ' || cur_index.table_name  || ' ('   ;
      
      for cur_col in 
        -- 按索引列位置,加入索引命令的括号内
        (select t.index_name,t.table_name,t.column_name,t.column_position from dba_ind_columns t 
                where t.index_name=cur_index.index_name order by t.column_position ) loop

         -- 索引字段       
         sqltext := sqltext || cur_col.column_name || ','    ;  
    
      end loop;           
         -- 删除最后一个逗号    
         sqltext := substr(sqltext ,1,length(sqltext)-1);
         
         
         --增加右括号
         sqltext := sqltext || ')' ;

         -- 索引所属表空间
         sqltext := sqltext || ' tablespace ' || tb_index || ' ;' ;

     dbms_output.put_line(sqltext);
     
     -- sql命令字符串清空     
     sqltext := '';         
     
    end loop;
  
end;
/

猜你喜欢

转载自blog.csdn.net/qq_39065491/article/details/131715391
今日推荐