请教:如何通过pl/sql存储过程实现:删除一个表的两个索引,然后再重建它们

迈克尔1998 2016-09-11 11:29:56
请教:如何通过pl/sql存储过程实现:删除一个表的两个索引,然后再重建它们,要索引名称跟原来的一样。
...全文
499 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsnhan 2016-09-12
  • 打赏
  • 举报
回复
create or replace procedure p1(arg_table in varchar2) is
 str varchar2(4000);
begin
    declare
         cursor c is select index_name from user_indexes where lower(table_name) = lower(arg_table) ;
          c_row c%rowtype;
           begin
               for c_row in c loop
                   SELECT DBMS_METADATA.GET_DDL('INDEX',c_row.index_name) into str from dual;
                   execute immediate 'drop index '||c_row.index_name;
                   execute immediate str; 
               end loop;
       end;       

end p1;

SQL> select index_name from user_indexes where table_name='T1';

INDEX_NAME
------------------------------
T2_IDX2
T1_IDX1

SQL> exec p1('T1');
DROP
CREATE
DROP
CREATE

PL/SQL 过程已成功完成。

SQL> select index_name from user_indexes where table_name='T1';

INDEX_NAME
------------------------------
T2_IDX2
T1_IDX1
疑问:同名同列,直接rebuild就可以了,为啥要删了重建呢
卖水果的net 2016-09-11
  • 打赏
  • 举报
回复
楼主的意思,只知道表名,不知道索引的名字,也不知道索引用在哪个(些)列上?

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧