使列默认为NULL

时间:2015-09-22 09:38:16

标签: sql oracle null oracle-sqldeveloper default-value

如何将列默认设置为NULL 显式

我想在默认情况下将Oracle SQL Developer中的列声明为NULL。我知道这个事实,如果我根本没有定义任何默认值,NULL将是默认值。但是,如果我想明确地将NULL定义为默认值,我如何定义-- 1: Does not work. ALTER TABLE MY_TABLE ADD ( MY_COLUMN TIMESTAMP(6) DEFAULT null ); -- 2: Does not work. ALTER TABLE MY_TABLE ADD ( MY_COLUMN TIMESTAMP(6) DEFAULT NULL ); -- 3: Does not work. ALTER TABLE MY_TABLE ADD ( MY_COLUMN TIMESTAMP(6) DEFAULT (null) ); -- 4: This works. ALTER TABLE MY_TABLE ADD ( MY_COLUMN TIMESTAMP(6) );

NULL

在案例1-3中,默认值为字符串(" null"," (null)"或" {{ 1}}"),但不是实际的NULL值。那么,我在这里错过了什么?

//编辑:

情况(a)和(b)对应于情况1和2.在SQL Developer中显示nullNULL的文本值。情况(c)对应于情况4,其中明确地设置真实 (null)值。截图是在SQL Developer的表格 Columns 选项卡上进行的。

SQL Developer http://s1.postimg.org/fclraa0dp/SQL_Developer.png

2 个答案:

答案 0 :(得分:3)

由于nullNULL(null)是相同的,我不明白问题是什么。

它也不是SQL Developer的“问题”。

Oracle只是简单地存储默认表达式,就像您在系统目录中编写的那样。 SQL Developer只显示它。

假设以下陈述:

create table my_table (id integer);
alter table my_table add my_column_1 timestamp(6) default null;
alter table my_table add my_column_2 timestamp(6) default null;
alter table my_table add my_column_3 timestamp(6) default (null);

然后

select column_id, column_name, data_type, data_default
from user_tab_columns
where table_name = 'MY_TABLE'
order by column_id;

将返回以下内容:

COLUMN_ID | COLUMN_NAME | DATA_TYPE    | DATA_DEFAULT
----------+-------------+--------------+-------------
        1 | ID          | NUMBER       |             
        2 | MY_COLUMN_1 | TIMESTAMP(6) | NULL        
        3 | MY_COLUMN_2 | TIMESTAMP(6) | null        
        4 | MY_COLUMN_3 | TIMESTAMP(6) | (null)      

当您从系统中提取DDL时,您再次得到您编写的确切原因:

select dbms_metadata.get_ddl('TABLE', 'MY_TABLE', user)
from dual;

返回:

  CREATE TABLE "TK_HIRAC"."MY_TABLE" 
   (    "ID" NUMBER(*,0), 
    "MY_COLUMN_1" TIMESTAMP (6) DEFAULT NULL, 
    "MY_COLUMN_2" TIMESTAMP (6) DEFAULT null, 
    "MY_COLUMN_3" TIMESTAMP (6) DEFAULT (null)
   ) SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS NOLOGGING
  TABLESPACE "USERS" 

答案 1 :(得分:0)

试试这个:

HUSQVIK@panel_management> CREATE TABLE MY_TABLE (C1 NUMBER NULL);

创建表。

HUSQVIK@panel_management> ALTER TABLE MY_TABLE ADD (
  2    MY_COLUMN TIMESTAMP(6) DEFAULT NULL
  3  );

表格改变了。

HUSQVIK@panel_management>

适合我。