首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从oracle中的列中删除默认值?

如何从oracle中的列中删除默认值?
EN

Stack Overflow用户
提问于 2011-12-13 06:04:55
回答 4查看 68.1K关注 0票数 47

表中某列的默认值为sysdate,但我想将其更改为没有默认值,我该怎么做呢?

EN

回答 4

Stack Overflow用户

发布于 2011-12-13 06:08:33

代码语言:javascript
运行
复制
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
票数 47
EN

Stack Overflow用户

发布于 2016-05-17 08:15:11

Joe's answer是正确的,因为带有DEFAULT NULL的列在功能上等同于从未为该列定义过默认值:如果某列没有默认值,则插入新行而不为该列指定值将导致NULL

然而,在内部代表了这两种情况,通过查看ALL_TAB_COLUMNS system view可以看出这一点。(这适用于Oracle 10.x、11.x和12.x,可能也适用于较早的版本。)

  1. 使用DEFAULT NULL创建或编辑列的情况:

create table foo (bar varchar2(3)默认null);select default_length,data_default from all_tab_columns where table_name='FOO';=> default_length data_default -4NULL select dual(‘TABLE’,'FOO') from dual;=> CREATE TABLE "FOO“( "BAR”VARCHAR(3)默认NULL…)

  • 未指定默认值:

create table foo (bar varchar2(3));select default_length,data_default from dual where table_name='FOO';=> default_length data_default - (null) select dbms_metadata.get_ddl('TABLE','FOO') from dual;=>创建表"FOO“( "BAR”VARCHAR(3)…)

如上所述,在一个重要的情况下,这种原本毫无意义的区别会在Oracle的输出中产生影响:当使用DBMS_METADATA.GET_DDL()提取表定义时。

如果您使用GET_DDL()内省您的数据库,那么对于功能相同的表,您将得到略有不同的DDL输出。

当使用GET_DDL()进行版本控制和数据库的多个实例之间的比较时,这真的很烦人,除了手动修改GET_DDL()的输出,或者完全重新创建没有缺省值的表之外,没有办法避免这种情况。

票数 11
EN

Stack Overflow用户

发布于 2013-05-13 08:14:43

执行所需操作的唯一方法是重新创建表。

在Toad中很容易做到这一点,只需右击表格并选择“重建表格”即可。Toad将创建脚本,该脚本将重命名该表并重新创建新表。该脚本将重新创建索引、约束、外键、注释等。并用数据填充表。

只需修改脚本以删除相关列后面的"default null“即可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8481532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档