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

迈不过友情╰ 2022-04-14 03:13 205阅读 0赞

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;

  1. if (tablespace\_name is null) or idx.status = 'UNUSABLE' then
  2. --如果没有指定表空间,或索引无效,则在原表空间重建
  3. sqlt := 'alter index ' || idx.index\_name || ' rebuild ';
  4. elsif upper(tablespace\_name) <> idx.tablespace\_name then
  5. --如果指定的不同的表空间,则在指定表空间待建索引
  6. sqlt := 'alter index ' || idx.index\_name || ' rebuild tablespace ' || tablespace\_name;
  7. else
  8. --如果表空间相同,则跳过
  9. goto continue;
  10. end if;
  11. dbms\_output.put\_line(idx.index\_name);
  12. EXECUTE IMMEDIATE sqlt;
  13. <<continue>>
  14. null;
  15. end loop;

end;
/*
功能:重建索引。
说明:如果表空间参数传入null,则在原表空间内重建索引,否则在目标表空间重建索引。
如果表空间相同,则跳过。
only_unusable表示是否只对无效的索引进行重建
作者:81, 2007年6月26日
*/

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sscsgss/archive/2009/08/21/4468580.aspx

发表评论

表情:
评论列表 (有 0 条评论,205人围观)

还没有评论,来说两句吧...

相关阅读