我刚刚创建了一个如下表格:
CREATE TABLE EMP
(
ENO NUMBER(5, 0) not null,
ENAME VARCHAR2(20 BYTE),
SAl NUMBER(10, 0),
DPTNAME VARCHAR2(50 BYTE),
EPLACE VARCHAR2(20 BYTE),
DOB DATE
);
现在我要禁用 NOT NULL 约束。我尝试使用ALTER TABLE EMP MODIFY (ENO NOT NULL DISABLE);
,但它显示出一些错误。
你能告诉我哪里出错了吗?
答案 0 :(得分:4)
你可以使用Sachu的答案放弃约束(我不认为BTW应该是downvote)。
要禁用约束,首先需要找到由Oracle生成的名称。您可以在Oracle的USER_CONSTRAINTS
视图中找到该名称:查找“搜索条件”为"ENO" IS NOT NULL
的那个“ - 在您的问题中,它将是表格中的唯一约束,但在其他情况下可能是表格上的多个约束(甚至列上)。
SQL> CREATE TABLE EMP
2 (
3 ENO NUMBER(5, 0) not null,
4 ENAME VARCHAR2(20 BYTE),
5 SAl NUMBER(10, 0),
6 DPTNAME VARCHAR2(50 BYTE),
7 EPLACE VARCHAR2(20 BYTE),
8 DOB DATE
9 );
Table created.
SQL> SELECT CONSTRAINT_NAME, SEARCH_CONDITION
2 FROM USER_CONSTRAINTS
3 WHERE TABLE_NAME = 'EMP';
CONSTRAINT_NAME SEARCH_CONDITION
--------------- -----------------
SYS_C009208 "ENO" IS NOT NULL
所以Oracle给出约束的名称是SYS_C009208
。现在你可以禁用它:
SQL> ALTER TABLE EMP DISABLE CONSTRAINT SYS_C009208;
Table altered.
答案 1 :(得分:2)
尝试
ALTER TABLE EMP MODIFY (ENO null);