Oracle SQL-Developer生成已经存在的数据库表(项)的DDL语句。生成的DDL语句无法在新的数据库实例中应用,这很奇怪。这是DDL的简化示例
CREATE TABLE AB
(
"A" NUMBER(*,0),
"B" NUMBER(*,0),
"C" VARCHAR2(255 BYTE),
CONSTRAINT "CHK_AB_A_NN" CHECK (A IS NOT NULL) ENABLE,
CONSTRAINT "CHK_AB_B_NN" CHECK (B IS NOT NULL) ENABLE,
CONSTRAINT "PK_AB" PRIMARY KEY ("A", "B")
);
CREATE INDEX "IDX_AB_A" ON "AB"("A");
CREATE INDEX "IDX_AB_B" ON "AB"("B");
CREATE UNIQUE INDEX "PK_AB" ON "AB"("A", "B");
如果我在新的oracle实例中执行这些语句,我会收到错误:
SQL-Fehler: ORA-01408: Diese Spaltenliste hat bereits einen Index
1. 00000 - "such column list already indexed"
出现此错误的原因是什么?
答案 0 :(得分:12)
部分:
CONSTRAINT "PK_AB" PRIMARY KEY ("A", "B")
正在生成索引。没有索引,主键约束不能存在。但是,部分:
CREATE UNIQUE INDEX "PK_AB" ON "AB"("A", "B");
正在生成另一个具有相同列的索引。这就是错误的原因。很奇怪,Oracle工具生成了错误的脚本:)也许这是一个错误。
答案 1 :(得分:4)
CREATE TABLE语句中的主键约束会自动在(“A”,“B”)上创建唯一索引,因为它是PRIMARY KEY。然后引发错误,因为您尝试在相同的列上重新创建已存在的UNIQUE INDEX。
更新:我已经使用Oracle SQL Developer 3.2.20.09对其进行了测试,并且不存在上述问题。你可能使用的是旧版本吗?