重建對象索引

create or replace procedure CC_REBUILD_IDX(O_User         in Varchar2,
                                           IDX_TABLESPACE in Varchar2) is
  IndexName   varchar2(255);
  v_ErrorText varchar2(1000);
  Ret         number(2);
  cursor get_Index is
    SELECT index_name FROM all_indexes WHERE owner = O_User;
begin
-- 重建用戶下的所有索引到一表空間
  open get_Index;
  loop
    fetch get_Index
      into IndexName;
    begin
      execute immediate 'alter index ' || IndexName ||
                        ' rebuild tablespace ' || IDX_TABLESPACE;
      commit;
    exception
      when others then
        v_ErrorText := IndexName || lpad(to_char(SQLCODE), 5, '0') ||
                       ' 錯誤原因爲:' || SUBSTR(SQLERRM, 1, 200);
        INSERT INTO T_errorlog (errorlogid, errocontent) VALUES (CMS_ERRINFO_SEQ.Nextval, v_ErrorText);
        commit;
    end;
    exit when get_Index%notfound; -- 無此會死循環
  end loop;
  close get_Index;

end CC_REBUILD_IDX;
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章