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 回答
3

问题与

但是我发现了这个奇怪的索引,我不记得我已经添加了

来是因为你没有添加它。你有一个主键,然后你删除了它,但是当你这样做时,Oracle 不会删除每个主键都有的关联唯一索引。

因此,当您删除主键时,您必须删除该主键的唯一索引,该索引与主键具有相同的名称。

因此,要删除 MY_TABLE_PK 您必须执行以下操作:

ALTER TABLE MY_TABLE DROP PRIMARY KEY DROP INDEX;

所以你确保索引也被删除。

于 2017-02-08T14:28:13.900 回答
1

“从 pl/sql 我右键单击表格”

IDE 的问题在于它们让我们感觉非常高效,因为我们只需点击一下就可以完成工作,而无需编写一些代码。这是一个问题,因为当发生异常情况时,IDE 不利于调查,而且我们缺乏对数据库底层结构的理解,我们需要帮助自己。

如果你想学习 Oracle 数据库,你能做的最糟糕的事情就是下载 SQL Developer 或 PLSQL Developer 或 TOAD。它们都是很好的工具,但唯一应该使用它们的人是不需要使用它们的人。

于 2013-07-15T08:20:34.947 回答
0

以下对我有用的唯一索引:

ALTER INDEX UX_CHARGES UNUSABLE
/

DROP INDEX UX_CHARGES
/

请参阅:https ://docs.oracle.com/cd/E18283_01/server.112/e17120/indexes004.htm#insertedID3

于 2018-09-18T21:06:05.770 回答