繁体   English   中英

Oracle SQL无法选择我的索引

[英]Oracle SQL can't select my indexes

我创建了这样的索引:

--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:列表中的此类列已编入索引错误...

编辑(选择* all_ind_columns并且索引不存在)

在此处输入图片说明

您的问题似乎有点误导,因为您将永远无法成功创建那些命名索引。 如您对all_ind_columns的后续查询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并且不能将其删除是非常合理的,并且由于无法创建它们的原因,您无法重新创建它们...

您创建的索引可能是与用于删除或选择该索引的用户不同的oracle用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM