sql - Oracle 索引的定义与约束相同

标签 sql oracle oracle10g ddl oracle-sqldeveloper

我在使用 Oracle SQL Developer 时遇到问题,每当我转到表 TLCASENOTE 的索引部分时,它都会告诉我索引“索引 PK_TBLCASENOTE 的定义与约束 PK_TBLCASENOTES 相同”。

我找到了这个Oracle form post但似乎没有人有解决办法。 This is the DDL用于制作表格。

CREATE TABLE "DSAC"."TBLCASENOTES" (
    "PRIMARYID" NUMBER(11,0), 
    "CLIENTID" NUMBER(11,0), 
    "INTAKEID" NUMBER(11,0), 
    "AGENCYID" NUMBER, 
    "CREATEDDATE" DATE, 
    "CREATEDBY" VARCHAR2(30 BYTE), 
    "MODIFIEDBY" VARCHAR2(30 BYTE), 
    "MODIFIEDDATE" DATE, 
    "TCN" NUMBER DEFAULT 1, 
    "STAFF" VARCHAR2(30 BYTE), 
    "CASENOTETYPE" VARCHAR2(20 BYTE), 
    "CONTACTDATE" DATE, 
    "CONTACTHOUR" VARCHAR2(2 BYTE) DEFAULT null, 
    "CONTACTMIN" VARCHAR2(2 BYTE) DEFAULT null, 
    "CONTACTAMPM" VARCHAR2(2 BYTE) DEFAULT null, 
    "DHOUR" VARCHAR2(2 BYTE) DEFAULT null, 
    "DMIN" VARCHAR2(2 BYTE) DEFAULT null, 
    "BFDATE" DATE, 
    "NOTES" CLOB, 
    CHECK ("PRIMARYID" IS NOT NULL) ENABLE, 
    CHECK ("CLIENTID" IS NOT NULL) ENABLE, 
    CHECK ("INTAKEID" IS NOT NULL) ENABLE, 
    CONSTRAINT "PK_TBLCASENOTES" PRIMARY KEY ("PRIMARYID")
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
    TABLESPACE "CONTACT"  ENABLE, 
    CONSTRAINT "CASENOTES_CLIENT_FK" FOREIGN KEY ("CLIENTID") REFERENCES "DSAC"."TBLCLIENT" ("CLIENTID") ON DELETE CASCADE ENABLE, 
    CONSTRAINT "CASENOTES_INTAKE_FK" FOREIGN KEY ("INTAKEID") REFERENCES "DSAC"."TBLINTAKE" ("INTAKEID") ON DELETE CASCADE ENABLE
) 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT" 
LOB ("NOTES") STORE AS (
    TABLESPACE "CONTACT" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10
    NOCACHE LOGGING 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
);

CREATE INDEX "DSAC"."CASENOTESAGENCYINDEX" ON "DSAC"."TBLCASENOTES" ("AGENCYID") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT";

CREATE UNIQUE INDEX "DSAC"."PK_TBLCASENOTE" ON "DSAC"."TBLCASENOTES" ("PRIMARYID") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT";

CREATE UNIQUE INDEX "DSAC"."SYS_IL0000059271C00019$$" ON "DSAC"."TBLCASENOTES" (
PCTFREE 10 INITRANS 2 MAXTRANS 255 
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT" 
PARALLEL (DEGREE 0 INSTANCES 0);

CREATE INDEX "DSAC"."TBLCASENOTESCLIENTINDEX" ON "DSAC"."TBLCASENOTES" ("CLIENTID") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT";

CREATE INDEX "DSAC"."TBLCASENOTESINTAKEINDEX" ON "DSAC"."TBLCASENOTES" ("INTAKEID") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "CONTACT";

最佳答案

该问题是因为如果不存在索引,Oracle 会自动为主键创建索引。冲突是因为尝试在同一列上创建索引,尽管名称略有不同。

我最后的地方是与表创建分开设置约束,这意味着您将使用以下步骤:

  1. 创建表(无约束,包括主键)
  2. 创建索引
  3. 应用约束

关于sql - Oracle 索引的定义与约束相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640719/

相关文章:

android - GreenDao,查询字符串列表

mysql - 如何登录 MySQL 并从命令行执行选择

Oracle 删除触发器后...如何避免变异表 (ORA-04091)?

oracle - 获取 PL/SQL 集合中元素的索引

mysql - 查询 JOIN 与否? (优化)

MySQL:无法创建表(错误号:150)

sql - 我在 Oracle 中提交的频率

python - cx_Oracle 使用 CLOB 执行many

php - 当字符串也是字符串变量时,如何为字符串中存在的变量赋值?

java - 如何通过 Hibernate 访问 Oracle DB 返回标识列的最大值?