Может ли NULL быть ограничением типа NOT NULL в SQL? - PullRequest
2 голосов
/ 23 декабря 2011
create table t1(ider number null);  

Он ведет себя как:

create table t1(ider number check (ider is null));  

или

create table t1(ider number default null);  

?

Ответы [ 2 ]

11 голосов
/ 23 декабря 2011

Ни одна из ваших двух гипотез.

Oracle принимает NULL в спецификации столбца как явное отсутствие ограничения NOT NULL . Это (вводящий в заблуждение) запрет на использование в операторе CREATE TABLE, но не обязательно в операторе ALTER TABLE, где он может отменить ранее существующее ограничение.

CREATE TABLE t(col1 TYPE NOT NULL);
ALTER TABLE t MODIFY col1 NULL; -- Now the `NOT NULL` constraint has been dropped

Поэтому, когда вы используете CREATE TABLE t(c INTEGER NULL), это не означает, что c всегда должно быть нулевым, и не означает, что c имеет значение по умолчанию NULL. Это просто означает, что c равен нулю в порядке .

screenshot taken on Tora

0 голосов
/ 23 декабря 2011

Если вы хотите сделать это, вы можете!

Например, работает следующее:

create table #tempe (
valor int null
)

insert into #tempe values(null)

select * from #tempe
drop table #tempe

Но .. почему?* оо 1007 *

...