Joe*_*lli 39
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)
乔的回答是在这个意义上,有一栏正确的DEFAULT NULL是功能上等同于具有从未在首位的是列定义的默认值:如果一列没有默认值,插入新行不指定该列结果的值NULL.
但是,Oracle通过查看ALL_TAB_COLUMNS系统视图可以在内部清楚地表示这两种情况.*
已创建或ALTER编辑列的情况DEFAULT NULL:
create table foo (bar varchar2(3) default null);
select default_length, data_default from all_tab_columns where table_name='FOO';
=> default_length data_default
-------------- ------------
4 NULL
select dbms_metadata.get_ddl('TABLE','FOO') from dual;
=> CREATE TABLE "FOO"
( "BAR" VARCHAR(3) DEFAULT NULL
…
)
Run Code Online (Sandbox Code Playgroud)没有默认指定:
create table foo (bar varchar2(3));
select default_length, data_default from all_tab_columns where table_name='FOO';
=> default_length data_default
-------------- ------------
(null) (null)
select dbms_metadata.get_ddl('TABLE','FOO') from dual;
=> CREATE TABLE "FOO"
( "BAR" VARCHAR(3)
…
)
Run Code Online (Sandbox Code Playgroud)如上所示,有一个重要的情况是,这种无意义的区别DBMS_METADATA.GET_DDL()会对Oracle的输出产生影响:用于提取表定义时.
如果您正在使用GET_DDL()内省数据库,那么对于功能相同的表,您将获得略微不同的DDL输出.
当GET_DDL()用于版本控制和数据库的多个实例之间的比较时,这真的很烦人,除了手动修改输出GET_DDL()或完全重新创建没有默认值的表之外,没有办法避免它.
*至少对于Oracle 10g,11g和12c.
| 归档时间: |
|
| 查看次数: |
53967 次 |
| 最近记录: |