如何将列默认设置为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中显示null
或NULL
的文本值。情况(c)对应于情况4,其中明确地设置真实 (null)
值。截图是在SQL Developer的表格 Columns 选项卡上进行的。
SQL Developer http://s1.postimg.org/fclraa0dp/SQL_Developer.png
答案 0 :(得分:3)
由于null
,NULL
和(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>
适合我。