如何在SQL中删除Not null约束?

时间:2015-07-08 01:00:19

标签: sql oracle oracle-sqldeveloper

我刚刚创建了一个如下表格:

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);,但它显示出一些错误。

你能告诉我哪里出错了吗?

2 个答案:

答案 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);