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

Oracle重建所有表的索引的存储过程(重建索引)

Oracle重建所有表的索引的存储过程(重建索引)
 
Sql代码  
/*  
功能:重建索引。  
说明:如果表空间参数传入null,则在原表空间内重建索引,否则在目标表空间重建索引。  
      如果表空间相同,则跳过。  
      only_unusable表示是否只对无效的索引进行重建  
*/  
  
create or replace procedure p_rebuild_all_index  
   (tablespace_name in varchar2,--这里是表空间名,如果不改变表空间,可以传入null  
   only_unusable in boolean)    --是否仅对无效的索引操作  
as  
   sqlt varchar(200);  
begin  
    --只取非临时索引  
    for idx in (select index_name, tablespace_name, status from user_indexes where temporary = 'N') loop  
        --如果是如重建无效的索引,且当索引不是无效时,则跳过  
        if only_unusable = true and idx.status <> 'UNUSABLE' then  
           goto continue;  
        end if;  
  
        if (tablespace_name is null) or idx.status = 'UNUSABLE' then  
           --如果没有指定表空间,或索引无效,则在原表空间重建  
           sqlt := 'alter index ' || idx.index_name || ' rebuild ';  
        elsif upper(tablespace_name) <> idx.tablespace_name then  
           --如果指定的不同的表空间,则在指定表空间待建索引  
           sqlt := 'alter index ' || idx.index_name || ' rebuild tablespace ' || tablespace_name;  
        else  
           --如果表空间相同,则跳过  
           goto continue;  
        end if;  
  
        dbms_output.put_line(idx.index_name);  
        EXECUTE IMMEDIATE sqlt;  
        <<continue>>  
        null;  
     end loop;  
end;  
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,