您的位置:首页 > 数据库 > Oracle

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

2013-06-14 18:41 531 查看

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;

/*

功能:重建索引。

说明:如果表空间参数传入null,则在原表空间内重建索引,否则在目标表空间重建索引。

如果表空间相同,则跳过。

only_unusable表示是否只对无效的索引进行重建

作者:81, 2007年6月26日

*/

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sscsgss/archive/2009/08/21/4468580.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: