0

カーソルを使用してテーブルから既存のすべてのインデックス (ビットマップ インデックス ジョイン) をフェッチし、それらを削除したいと考えています。逆に、 and 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 に答える