表中某列的默认值为sysdate,但我想将其更改为没有默认值,我该怎么做呢?
发布于 2011-12-13 06:08:33
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
发布于 2016-05-17 08:15:11
Joe's answer是正确的,因为带有DEFAULT NULL
的列在功能上等同于从未为该列定义过默认值:如果某列没有默认值,则插入新行而不为该列指定值将导致NULL
。
然而,在内部代表了这两种情况,通过查看ALL_TAB_COLUMNS
system view可以看出这一点。(这适用于Oracle 10.x、11.x和12.x,可能也适用于较早的版本。)
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()
的输出,或者完全重新创建没有缺省值的表之外,没有办法避免这种情况。
发布于 2013-05-13 08:14:43
执行所需操作的唯一方法是重新创建表。
在Toad中很容易做到这一点,只需右击表格并选择“重建表格”即可。Toad将创建脚本,该脚本将重命名该表并重新创建新表。该脚本将重新创建索引、约束、外键、注释等。并用数据填充表。
只需修改脚本以删除相关列后面的"default null“即可。
https://stackoverflow.com/questions/8481532
复制相似问题