Oracle SQL无法选择我的索引

时间:2013-01-16 15:41:03

标签: sql oracle indexing

我创建了这样的索引:

--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且索引不存在)

enter image description here

2 个答案:

答案 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用户创建索引。