См. спецификацию пункта «Создание таблицы».
Если <ограничение NULL-значений>
явно не указано, по умолчанию используется NULL.
Если задана конструкция <имя столбца>
NULL, то для того же столбца нельзя задать NOT NULL или PRIMARY KEY.
Если NOT NULL не указан и не задано <значение по умолчанию>
, то подразумевается DEFAULT NULL.
Разрешено сочетание описателей NOT NULL и DEFAULT NULL для столбца. В этом случае используется NOT NULL, а DEFAULT NULL игнорируется.
create table tab1 (i int unique default null not null);
Атрибут столбца NULL разрешает, NOT NULL запрещает присваивать значению столбца NULL-значения. По умолчанию используется NULL.
create or replace table test (col1 int not null); insert into test(col1) values (100); insert into test(col1) values (null); /*ошибка */ insert into test; /* ошибка */
Атрибут NULL устанавливает значение по умолчанию для столбцов, значение которых не определено в операции добавления (модификации) записи и для которых не задана опция <подставляемое значение>
.
create or replace table test (col1 int null); insert into test(col1) values (100); insert into test(col1) values (null); insert into test; select NVL(col1,-1) from test; | 100| | -1| | -1|
Если для столбца заданы одновременно <ограничение NULL-значений>
и <значение по умолчанию>
, то приоритет имеет опция <ограничение NULL-значений>
.
Например, в случаях
create or replace table test (col1 int not null default null ); create or replace table test (col1 int default null not null);
будет применяться правило not null.
<Подставляемое значение столбца>
не должно конфликтовать с <ограничением NULL-значений>
.
create or replace table test (col1 int null, col2 int generated always as (col1+500) not null); insert into test(col1) values (100); insert into test(col1) values (null);/ ошибка insert into test; /ошибка select * from test