Определение ограничения NULL-значений
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
Если
< ограничение 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