Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle:ORA-01408:此类列列表已编制索引_Oracle_Indexing - Fatal编程技术网

Oracle:ORA-01408:此类列列表已编制索引

Oracle:ORA-01408:此类列列表已编制索引,oracle,indexing,Oracle,Indexing,我创建了一个表: CREATE TABLE SCHEMA_NAME.TABLE_NAME ( ID VARCHAR2(100) PRIMARY KEY NOT NULL, A_ID VARCHAR2(100) NOT NULL, B_ID VARCHAR2(100), C_ID INTEGER, CONSTRAINT FK_C_NOTE FOREIGN KEY (C_ID) REFERENCES C(ID), CONSTRAINT FK_A_NOTE FOREIGN KE

我创建了一个表:

CREATE TABLE SCHEMA_NAME.TABLE_NAME
(
  ID VARCHAR2(100) PRIMARY KEY NOT NULL,
  A_ID VARCHAR2(100) NOT NULL,
  B_ID VARCHAR2(100),
  C_ID INTEGER,
  CONSTRAINT FK_C_NOTE FOREIGN KEY (C_ID) REFERENCES C(ID),
  CONSTRAINT FK_A_NOTE FOREIGN KEY (A_ID) REFERENCES A(ID),
  CONSTRAINT FK_B_NOTE FOREIGN KEY (B_ID) REFERENCES B(ID)
);
我尝试应用以下索引:

CREATE INDEX IDX_FK_A_TABLE_NAME on SCHEMA_NAME.TABLE_NAME(A_ID) tablespace TS_SCHEMA_NAME_DATA;
CREATE INDEX IDX_FK_C_TABLE_NAME on SCHEMA_NAME.TABLE_NAME(C_ID) tablespace TS_SCHEMA_NAME_DATA; --Fails
CREATE INDEX IDX_FK_B_TABLE_NAME on SCHEMA_NAME.TABLE_NAME (B_ID) tablespace TS_SCHEMA_NAME_DATA; --Fails
但当我尝试创建最后两个索引时,我得到:

ORA-01408:此类列列表已编制索引

为什么会这样?这些索引是自动创建的吗


如果我尝试:

SELECT INDEX_NAME FROM ALL_INDEXES WHERE TABLE_NAME = 'NOTE';
我得到:

INDEX_NAME
----------
IDX_FK_A_TABLE_NAME
SYS_C0044692561

通过查询所有的索引列(或者DBA索引列,如果您有访问权限的话)。它将显示哪些表列由哪个索引索引

SELECT c.index_owner, c.index_name, c.table_owner, c.table_name, c.column_name, c.column_position
  FROM all_ind_columns c
 WHERE c.table_owner = 'SCHEMA_NAME'
       AND c.table_name = 'NOTE'
 ORDER BY c.index_owner, c.index_name, c.column_position;

在站点注释中,当您创建索引时,您没有在它们前面加上模式所有者(CREATE INDEX schema.IDX\u FK\u a\u TABLE\u NAME…)。这意味着它们是在当前模式中创建的。另一方面,它可能与您面临的错误无关。

通过查询所有索引列(或DBA索引列,如果您有访问权限),再次检查索引列。它将显示哪些表列由哪个索引索引

SELECT c.index_owner, c.index_name, c.table_owner, c.table_name, c.column_name, c.column_position
  FROM all_ind_columns c
 WHERE c.table_owner = 'SCHEMA_NAME'
       AND c.table_name = 'NOTE'
 ORDER BY c.index_owner, c.index_name, c.column_position;

在站点注释中,当您创建索引时,您没有在它们前面加上模式所有者(CREATE INDEX schema.IDX\u FK\u a\u TABLE\u NAME…)。这意味着它们是在当前模式中创建的。另一方面,它可能与您面临的错误无关。

否索引不是自动创建的。我刚刚创建了表A、B、C,然后毫无错误地运行了create语句(在调整了模式和表空间名称之后)。是否有另一个名为NOTE的表不在架构“schema”中?这不会导致“create table”失败吗?@Ed0906-具有相同名称的表可以存在于多个架构中。您只为表的创建指定了模式(或者至少,这就是您所展示的全部内容)。如果您当前的模式(不是您指定的模式)已经有一个同名的表,那么您可能正在不同的模式中创建表和索引。但是您的所有索引查询表明情况并非如此。您的
create table
指定了SCHEMA.NOTE,而您的
create index
语句没有指定SCHEMA.NOTE。因此,如果您不是以SCHEMA连接的,或者如果存在一个名为NOTE的同义词,则不带SCHEMA前缀的“NOTE”可能指向另一个表。我尝试将索引脚本更改为使用SCHEMA.NOTE,但仍然失败,因为没有自动创建索引。我刚刚创建了表A、B、C,然后毫无错误地运行了create语句(在调整了模式和表空间名称之后)。是否有另一个名为NOTE的表不在架构“schema”中?这不会导致“create table”失败吗?@Ed0906-具有相同名称的表可以存在于多个架构中。您只为表的创建指定了模式(或者至少,这就是您所展示的全部内容)。如果您当前的模式(不是您指定的模式)已经有一个同名的表,那么您可能正在不同的模式中创建表和索引。但是您的所有索引查询表明情况并非如此。您的
create table
指定了SCHEMA.NOTE,而您的
create index
语句没有指定SCHEMA.NOTE。因此,如果您不是作为SCHEMA连接的,或者如果存在一个名为NOTE的同义词,则不带SCHEMA前缀的“NOTE”可能指向另一个表。我尝试将索引脚本更改为使用SCHEMA.NOTE,但仍然失败