sql - SQL中如何删除非空约束?

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

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

最佳答案

您可以使用 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.

关于sql - SQL中如何删除非空约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281870/

相关文章:

sql - 在防止 SQL 注入(inject)时,PG::Connection#exec_params 是否与使用准备好的语句相同?

Oracle构建顺序和PL/SQL软件包依赖关系

sql - 尽管语法不正确,Oracle脚本也不会产生错误。

sql - SQL 之上的列表实现

sql - 我如何获得SQL中多列总和的最大值?

database - 减少应用程序中的数据库调用并改进数据插入

c# - 具有自定义参数输入的企业库日志记录数据库跟踪监听器

sql - 如何在Oracle SQL Developer中查询数据库名称?

oracle - SQL Developer 连接问题

sql - 在不重新架构的情况下,您将如何跟踪所有 CRUD 操作的历史记录?