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

前端之家收集整理的这篇文章主要介绍了当我不知道约束的名称时,如何在Oracle中删除一个“not null”约束?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据库对字段有一个NOT NULL约束,我想删除这个约束。复杂因素是此约束具有系统定义的名称,并且生产服务器,集成服务器和各种开发人员数据库之间的约束名称不同。我们当前的过程是检查更改脚本,自动化任务通过sqlplus对目标数据库执行适当的查询,所以我更喜欢一个可以直接发送到sqlplus的解决方案。

在我自己的数据库sql删除这将是:

alter table MYTABLE drop constraint SYS_C0044566

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

select * from all_constraints where table_name = 'MYTABLE'

但我不知道如何使用SEARCH_CONDITION的LONG数据类型,或者如何最好地动态删除查找的约束,即使我知道它的名字。

所以,如何创建一个更改脚本,可以删除此约束基于它是什么,而不是它的名字是什么?

编辑:
@ Allan的答案是好的,但我担心(在我缺乏Oracle专业知识的情况下),可能有一个系统生成名称的任何约束都不会与它相关联的一种方式来删除约束没有不得不知道它的名字。是否真的,总是有一种方法,以避免在逻辑删除该约束时必须知道系统命名的约束的名称

alter table MYTABLE modify (MYCOLUMN null);

在Oracle中,如果为列指定了不为null,则不会自动创建非空约束。同样,当列更改为允许空值时,它们会自动删除

澄清修订的问题:此解决方案仅适用于为“非空”列创建的约束。如果在列定义中指定“主键”或检查约束而不对其进行命名,则最终将为约束(以及主键的索引)生成系统生成名称。在这些情况下,您需要知道名称删除它。最好的建议是通过确保为除“非空”之外的所有约束指定名称来避免该情况。如果你发现自己处于需要通常丢弃其中一个约束的情况,你可能需要求助于PL / sql和数据定义表。

猜你在找的Oracle相关文章