0

次のようなインデックスを作成しました。

--CREATE INDEXES for Tables
CREATE UNIQUE INDEX worker_name_index ON WORKER (worker_id);
CREATE UNIQUE INDEX company_name_index ON COMPANY (company_name);
CREATE UNIQUE INDEX project_name_index ON PROJECT (project_id);

しかし、インデックスがどこにあるかを見つけることができません:

SELECT * FROM USER_INDEXES;

ここにもありません:

SELECT * FROM ALL_INDEXES;

ここでも:

SELECT * FROM DBA_INDEXES;

また、これらのインデックスを削除することはできません。ドロップすると、ORA-01418:指定されたインデックスが存在しないというエラーがスローされるためです。

--REMOVE INDEXES
DROP INDEX project_name_index;
DROP INDEX company_name_index;
DROP INDEX project_name_index;

作成が上昇するため、再作成できません。ORA-01408:リスト内のそのような列はすでに索引付けされていますエラー...

編集済み(select * all_ind_columnsを使用し、インデックスはありません)

ここに画像の説明を入力してください

4

2 に答える 2

2

これらの名前付きインデックスを正常に作成できなかったため、質問は少し誤解を招くようです。に対する後続のクエリで示されるように、次のようになりますall_ind_columns

select * from all_ind_columns
where table_name = 'WORKER' and column_name = 'WORKER_ID'

... インデックスを作成しようとしている列のシステム生成インデックスが既に存在します。名前 ( などSYS_C0011015) は、それらがテーブルに対して定義された主キー (または場合によっては一意) 制約のシステム生成バッキング インデックスであることを示します。

ドキュメントには、いくつかの場所で次のように記載されています。

制約名を指定しない場合、Oracle は SYS_Cn 形式の制約のシステム名を生成します。

したがって、名前付きインデックスを作成することはできません。制約がテーブルに既に存在する場合、常に ORA-01408 が発生し、インデックスの作成後に制約を追加しようとするとalter失敗します。それらは実際には存在しないため、リストに記載されておらずall_indexes、ドロップできないことは非常に合理的であり、最初にそれらを作成できなかったのと同じ理由でそれらを再作成することはできません...

于 2013-01-16T17:23:10.900 に答える
0

おそらく、このインデックスを削除または選択するために使用するユーザーとは異なる oracle ユーザーでインデックスを作成しました。

于 2013-01-16T15:56:25.967 に答える