【发布时间】:2011-02-02 04:39:04
【问题描述】:
我有一个对字段有 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 专业知识),任何可能具有系统生成名称的约束都可能与它相关联的方式可能并不普遍正确,这种方法可以在没有必须知道它的名字。在逻辑上删除该约束时,是否总有一种方法可以避免必须知道系统命名约束的名称?
【问题讨论】:
-
只是为了满足您的好奇心:NOT NULL 约束是 Oracle 中的 only 约束类型,您可以删除它而无需知道约束的名称。您需要知道约束名称的所有其他约束类型。
标签: oracle plsql constraints