Определение значения по умолчанию столбцов таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
Суммарный размер
<значений по умолчанию>столбцов таблицы, задаваемых с помощью конструкций<задаваемое значение>,<вычисляемое значимое>не должен превышать 4000 символов. -
Если для столбца задано
<задаваемое значение>, то оно автоматически приводится к конструкцииGENERATED BY DEFAULT AS.Эти конструкции эквивалентны:
create or replace table q1(j int default 1, i int default (j+5)); create or replace table q1(j int default 1, i int generated by default as (j+5));
-
Разрешено использование функции
TO_DATEс константными аргументами в качестве<значения по умолчанию>для столбца типаDATE.create table tab1 (d1 date default to_date('01.01.2003'),'dd.mm.yyyy'); -
Запрещено одновременное задание для столбца опций
DEFAULTиPRIMARY KEY. -
Значение
DEFAULT NULLустанавливается лишь в том случае, если оно не конфликтует ни с какими ранее установленными атрибутами столбца. -
Значение
DEFAULT NULLдопускается для столбца с атрибутомNOT NULL, но не устанавливает NULL-значение по умолчанию. Т.е. попытка выполнитьALTER TABLE DROP DEFAULTдля такого столбца будет неудачной, т.к. NULL-значение является стандартным значением (а не значением по умолчанию) для тех полей таблицы, которым не присвоено реальное значение при выполнении операцииINSERT.
Общие правила
-
Конструкция
<значение по умолчанию>задает значение, которое будет присваиваться столбцу при добавлении записи, в которой значение данного столбца не указано. Тип данных<значения по умолчанию>должен соответствовать типу данных столбца или приводиться к нему.create or replace table test (col1 char(10) character set CP866 default 'Воронеж', col2 byte(5) default 0xFF00, col3 boolean default 'true', col4 real default (+00002.E-5), col5 numeric default -28.755, col6 date default ('07.11.1917'), col7 nchar(12) default n'ъъъ'); -
Для
BLOBиEXTFILEтипов данных<значение по умолчанию>не поддерживается. -
При отсутствии явного значения столбца или
<значения по умолчанию>столбцу присваивается NULL-значение (если оно допустимо) за исключением BLOB-столбца, которому присваивается нулевая длина BLOB-данных.create or replace table test (col1 char(5), col2 byte(10), col3 boolean,col4 extfile, col5 real, col6 numeric, col7 date, col8 nchar, col9 blob, col10 extfile); insert into test; select * from test; |NULL| NULL| … |Тип:0, Размер:0|NULL|
-
<Литерал>в<значении по умолчанию>может иметь максимальное отрицательное значение для соответствующего целочисленного типа данных, уменьшенное на 1.create or replace table test (i smallint autoinc default –32767); create or replace table test (i int autoinc default –2147483647);
-
Максимальное отрицательное значение
<литерала>в конструкцииAUTOINC INITIALна единицу меньше максимального отрицательного значения для соответствующего целочисленного типа данных.create or replace table tst (i smallint autoinc initial ( 32767)); create or replace table tst (i smallint autoinc initial (–32768)); /* ошибка */
-
<Значимое выражение>может содержать ссылки на столбцы добавляемой записи.create or replace table test (col1 int, col2 int default (col1+5), col3 date default (sysdate), col4 int default (abs(-45)+sqrt(16)), col5 char(10), col6 char(10) default (to_char(length(col5))), col7 char(10) default '12345', col8 char(10) default (to_char(length(col7)))); insert into test(col1,col5) values (200, '12345'); select * from test; |200|205| 16.11.2017:14:05:25| 49| 12345|5|