当我不知道约束的名称时,如何在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数据类型,或者如何最好地动态删除查找的约束,即使我知道它的名字。 所以,如何创建一个更改脚本,可以删除此约束基于它是什么,而不是它的名字是什么? 编辑: alter table MYTABLE modify (MYCOLUMN null); 在Oracle中,如果为列指定了不为null,则不会自动创建非空约束。同样,当列更改为允许空值时,它们会自动删除。 澄清修订的问题:此解决方案仅适用于为“非空”列创建的约束。如果在列定义中指定“主键”或检查约束而不对其进行命名,则最终将为约束(以及主键的索引)生成系统生成的名称。在这些情况下,您需要知道名称以删除它。最好的建议是通过确保为除“非空”之外的所有约束指定名称来避免该情况。如果你发现自己处于需要通常丢弃其中一个约束的情况,你可能需要求助于PL / SQL和数据定义表。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |