0

我想从带有游标的表中获取所有现有索引(位图索引连接)并删除它们。好吧,反过来,如果和 index 不存在,则创建它们。

到目前为止,我正在使用以下程序进行此操作:

DECLARE
  COUNT_INDEXES INTEGER;
BEGIN
  SELECT COUNT(*)
  INTO COUNT_INDEXES
  FROM USER_INDEXES
  WHERE INDEX_NAME = 'IDXNAME' ;

  IF COUNT_INDEXES > 0 THEN
    EXECUTE IMMEDIATE 'DROP INDEX IDXNAME';
  END IF;
END;
4

2 回答 2

1

干得好

declare
    cursor c_idx is 
        select  index_name 
        from    user_indexes 
        where   table_name = 'my_table_name';
begin 
    for x in c loop 
        execute immediate 'drop index '|| x.index_name;
    end loop;
end;
/
于 2013-11-12T07:28:59.237 回答
1

这是一个脚本,它删除所选表的所有索引。要重新创建它们,您必须提供更多信息。你想在每一列上创建一个索引吗?

DECLARE
  l_table_name varchar2(20) := 'MY_TABLE'; 
BEGIN
  FOR r_idx IN
    SELECT INDEX_NAME
    FROM   USER_INDEXES
    WHERE  TABLE_NAME = l_table_name;
  LOOP
    EXECUTE IMMEDIATE 'DROP INDEX ' || r_idx.INDEX_NAME;
  END;
END;
于 2013-11-12T07:29:17.057 回答