5

インデックスを削除しようとしています:

DROP INDEX PK_CHARGES

しかし、私はこのエラーが発生します

一意/主キーの適用に使用されるインデックスを削除できません

なぜこのエラーが発生するのですか? 必要な場合は、さらに情報を提供します。

それを解決する方法は?

編集テーブルに主キーはありませんが、追加したことを覚えていないこの奇妙なインデックスを見つけました:

インデックス名 = 同じ列を持つ SYS_C0040476

4

4 に答える 4

8

ALL_CONSTRAINTSパフォーマンス ビューにクエリを実行して、インデックスが使用されている制約と、それが適用されるテーブルを確認できます。次に例を示します。

select owner, constraint_name, constraint_type,
    table_name, index_owner, index_name
from all_constraints
where index_name = 'PK_CHARGES';

テーブル名は「CHARGES」、制約名はインデックス名と一致し、制約タイプは「P」になると思います。しかし、あなたは表を念頭に置いているので、おそらく名前は有用な規則に従っていません。古いバージョンのテーブルの名前が変更された可能性があります。これにより、新しい名前に対する制約が残ります (たとえばCHARGES_BACKUP、何か)。


テーブルをクリックしてからビューをクリックすると言いました。おそらく、制約/インデックスが存在するテーブルを見ていないでしょう。または、実際のテーブルの上にあるビューを見ているかもしれません。同じ列のインデックスについても言及してSYS_いますが、これは同じテーブルにはできません。複数の同様のテーブル、または複数のスキーマへのアクセスがありますか? そのインデックスに対しても上記のクエリを実行する必要があります。上記のように、テーブルの古いバージョン (またはバージョン) が見つかる場合があります。


制約が適用されているテーブルを特定したら、それを実際に保持する必要があるかどうかを判断する必要があります。保持しない場合は、ALTER TABLEコマンドで制約を削除して削除できます。

于 2013-07-15T07:36:01.230 に答える