【发布时间】:2017-06-25 07:25:18
【问题描述】:
我创建了一个表 ASSIGNMENTS:
CREATE TABLE assignments (
id_project NUMBER(4) NOT NULL CONSTRAINT fk_assignments_01 REFERENCES projects (id_project),
empl_number NUMBER(6) NOT NULL CONSTRAINT fk_assignments_02 REFERENCES employees (empl_id),
start DATE DEFAULT SYSDATE,
end DATE,
CONSTRAINT chk_assignements_dates CHECK (end > start),
rate NUMBER(7, 2),
CONSTRAINT chk_assignements_rate CHECK (rate > 0),
role VARCHAR2(20),
CONSTRAINT chk_assignements_role CHECK (rola IN ('ANALYST', 'DEVELOPER'))
);
现在我必须修改约束 fk_assignments_02。我想将 fk_assignments_02 设置为 DELETE CASCADE。我尝试这样做:
ALTER TABLE assignments
MODIFY id_project NUMBER(4) NOT NULL CONSTRAINT fk_assignments_01 REFERENCES projects (id_project) ON DELETE CASCADE;
但我得到一个错误: ORA-02275: 表中已存在此类引用约束
【问题讨论】:
-
先删除约束,然后重新创建。
-
我想知道如何修改它,我不想重新创建表。这不是一个解决方案,而是一个 hack。
-
你能用那个语句创建表吗?我强烈怀疑。您有一个错字:在最后一个检查约束中,
rola IN ...- 列的名称是role,而不是rola。start是 Oracle 保留字,因此不能用作列名。有什么问题,COPY AND PASTE 在您的机器上损坏了吗?