我创建了这样的索引:
--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且索引不存在)
答案 0 :(得分:2)
您的问题似乎有点误导,因为您无法成功创建这些命名索引。如您对all_ind_columns
的后续查询所示,例如:
select * from all_ind_columns
where table_name = 'WORKER' and column_name = 'WORKER_ID'
...您尝试索引的列已存在系统生成的索引。名称(例如SYS_C0011015
)表示它们是针对表定义的主键(或可能唯一)约束的系统生成的后备索引。
几个地方的documentation笔记:
如果未指定约束名称,则Oracle会生成一个 SYS_Cn形式约束的系统名称。
所以你不能创建命名索引;如果约束已经存在于表中,那么你总是得到一个ORA-01408,如果你在创建索引后尝试添加约束,那么alter
就会失败。由于它们确实不存在,因此它们未列在all_indexes
中并且无法删除是非常合理的,并且您无法重新创建它们的原因与您首先无法创建它们的原因相同。 ..
答案 1 :(得分:0)
可能您使用与用于删除或选择此索引的用户不同的oracle用户创建索引。