首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我不知道约束的名称时,如何在Oracle中删除"not null“约束?

当我不知道约束的名称时,如何在Oracle中删除"not null“约束?
EN

Stack Overflow用户
提问于 2010-03-30 03:17:52
回答 5查看 163.9K关注 0票数 90

我有一个数据库,它在一个字段上有一个非空约束,我想删除这个约束。复杂的因素是该约束具有系统定义的名称,并且该约束的名称在生产服务器、集成服务器和各种开发人员数据库之间是不同的。我们当前的流程是签入更改脚本,自动任务通过sqlplus对目标数据库执行适当的查询,所以我更喜欢直接发送到sqlplus的解决方案。

在我自己的数据库上,要删除它的SQL是:

代码语言:javascript
复制
alter table MYTABLE drop constraint SYS_C0044566

当我查询all_constraints视图时,我可以看到约束:

代码语言:javascript
复制
select * from all_constraints where table_name = 'MYTABLE'

但是我不确定如何使用SEARCH_CONDITIONLONG数据类型,或者如何最好地动态删除查找到的约束,即使我知道它的名称。

那么,我如何创建一个更改脚本来根据约束是什么而不是它的名称来删除该约束呢?

编辑:@Allan的答案很好,但我担心(因为我缺乏Oracle专业知识)可能并不是所有的约束都具有系统生成的名称,并且有一种方法可以在不知道约束名称的情况下删除约束。在逻辑删除约束时,总是有一种方法可以避免知道系统命名约束的名称,这是真的吗?

EN

回答 5

Stack Overflow用户

发布于 2010-11-28 14:12:45

尝试:

代码语言:javascript
复制
alter table <your table> modify <column name> null;
票数 17
EN

Stack Overflow用户

发布于 2012-12-01 03:57:21

只需记住,如果你想要设置为空的字段是主键的一部分,你就不能这样做。主键不能有空字段。

票数 1
EN

Stack Overflow用户

发布于 2015-05-23 06:58:47

要发现所使用的任何约束,请使用以下代码:

代码语言:javascript
复制
-- Set the long data type for display purposes to 500000.

SET LONG 500000

-- Define a session scope variable.

VARIABLE output CLOB

-- Query the table definition through the <code>DBMS_METADATA</code> package.

SELECT dbms_metadata.get_ddl('TABLE','[Table Described]') INTO :output FROM dual;

这实际上显示了一条create语句,说明如何创建被引用的表。通过了解表是如何创建的,您可以看到所有的表约束。

答案来自Michael McLaughlin的博客:来自他的数据库设计I班的http://michaelmclaughlin.info/db1/lesson-5-querying-data/lab-5-querying-data/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2540615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档