我有一个数据库,它在一个字段上有一个非空约束,我想删除这个约束。复杂的因素是该约束具有系统定义的名称,并且该约束的名称在生产服务器、集成服务器和各种开发人员数据库之间是不同的。我们当前的流程是签入更改脚本,自动任务通过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专业知识)可能并不是所有的约束都具有系统生成的名称,并且有一种方法可以在不知道约束名称的情况下删除约束。在逻辑删除约束时,总是有一种方法可以避免知道系统命名约束的名称,这是真的吗?
https://stackoverflow.com/questions/2540615
复制相似问题