最佳答案
我有一个数据库,它在一个字段上有一个 NOTNULL 约束,我想删除这个约束。使问题复杂化的因素是,这个约束具有系统定义的名称,而且在生产服务器、集成服务器和各种开发人员数据库之间,这个约束的名称是不同的。我们当前的流程是签入更改脚本,自动化任务通过 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 的专业知识) ,任何可能有系统生成名称的约束都可能与之相关联,从而在不知道名称的情况下移除约束,这种说法可能并不普遍正确。当逻辑上删除约束时,是否总有一种方法可以避免必须知道系统命名约束的名称?