Доступные версии документации

Определение ограничения NULL-значений
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. Если <ограничение NULL-значений> явно не указано, по умолчанию используется NULL.

  2. Если задана конструкция <имя столбца> NULL, то для того же столбца нельзя задать NOT NULL или PRIMARY KEY.

  3. Если NOT NULL не указан и не задано <значение по умолчанию>, то подразумевается DEFAULT NULL.

  4. Разрешено сочетание описателей NOT NULL и DEFAULT NULL для столбца. В этом случае используется NOT NULL, а DEFAULT NULL игнорируется.

    create table tab1 (i int unique default null not null);
Общие правила
  1. Атрибут столбца 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; /* ошибка */
  2. Атрибут 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|
  3. Если для столбца заданы одновременно <ограничение 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.

  4. <Подставляемое значение столбца> не должно конфликтовать с <ограничением 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
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter