我有一个对字段具有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专业知识),可能具有系统生成名称的任何约束都可能与它相关联,这并不是一种普遍的删除方法。约束而不必知道其名称。确实存在,在逻辑上删除该约束时,总会有一种避免必须知道系统命名约束名称的方法的方法吗?