我刚刚创建了一个如下表:
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);
,但它显示了一些错误。
你能告诉我哪里出错了吗?
您可以使用 Sachu 的回答来取消约束(顺便说一句,我认为这不值得投反对票)。
要禁用约束,您首先需要找到它的名称,该名称由 Oracle 生成。您可以在 Oracle 的 USER_CONSTRAINTS
View 中找到该名称:查找“搜索条件”为 "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.