Chr*_*mer 78 oracle plsql constraints
我有一个数据库,在字段上有一个NOT NULL约束,我想删除这个约束.复杂因素是此约束具有系统定义的名称,并且该约束的名称在生产服务器,集成服务器和各种开发人员数据库之间不同.我们当前的过程是检入更改脚本,并且自动化任务通过sqlplus对目标数据库执行适当的查询,因此我更喜欢可以直接发送到sqlplus的解决方案.
在我自己的数据库中,删除它的SQL将是:
alter table MYTABLE drop constraint SYS_C0044566
Run Code Online (Sandbox Code Playgroud)
查询all_constraints
视图时,我可以看到约束:
select * from all_constraints where table_name = 'MYTABLE'
Run Code Online (Sandbox Code Playgroud)
但我不知道如何配合工作SEARCH_CONDITION
的LONG
数据类型或如何最好地动态删除即使我知道它的名字查找到的约束.
那么,我如何创建一个更改脚本,可以根据它的内容而不是它的名称来删除这个约束?
编辑:@ Allan的回答很好,但我担心(由于我缺乏Oracle的专业知识),任何可能具有系统生成名称的约束都可能与其相关联,这可能并不普遍.约束而不必知道它的名字.在逻辑上删除该约束时,总会有一种方法可以避免必须知道系统命名约束的名称吗?
All*_*lan 156
alter table MYTABLE modify (MYCOLUMN null);
Run Code Online (Sandbox Code Playgroud)
在Oracle中,如果未为列指定null,则不会自动创建空约束.同样,当列更改为允许空值时,它们会自动删除.
澄清修订后的问题:此解决方案仅适用于为"非空"列创建的约束.如果在未定义命名的情况下在列定义中指定"主键"或检查约束,则最终将为约束(以及主键的索引)生成系统生成的名称.在这些情况下,您需要知道删除它的名称.最好的建议是通过确保为除"not null"之外的所有约束指定名称来避免该场景.如果您发现自己需要一般地放弃其中一个约束,那么您可能需要求助于PL/SQL和数据定义表.
小智 16
尝试:
alter table <your table> modify <column name> null;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133675 次 |
最近记录: |