Вот демонстрация, которая показывает, что происходит.
Сначала тестовая таблица и некоторые вставки:
SQL> create table test (id number, col varchar2(10));
Table created.
SQL> insert into test (id, col) values (1, null);
1 row created.
SQL> insert into test (id, col) values (2, 'Littlefoot');
1 row created.
SQL> select * from test;
ID COL
---------- ----------
1
2 Littlefoot
Измените таблицу так, чтобы вновь добавленные строки содержали «некоторое значение» длястолбец COL:
SQL> alter table test modify col default 'some value';
Table altered.
ОК;и теперь важная часть истории: обратите внимание на следующее:
SQL> -- this won't work as you wanted, because I explicitly inserted NULL into COL
SQL> insert into test (id, col) values (3, null);
1 row created.
SQL> -- this will work, because COL is omitted from the INSERT statement
SQL> insert into test (id) values (4);
1 row created.
SQL> select * From test;
ID COL
---------- ----------
1
2 Littlefoot
3
4 some value
SQL>
Видите?Если вы явно поместите NULL в столбец, он не получит значение по умолчанию.
Однако , если вы были на 12c (я знаю, вы не - простоскажем, для дальнейшего использования), есть еще один вариант: DEFAULT ON NULL
.Это выглядит так:
SQL> alter table test modify col default on null 'some value';
alter table test modify col default on null 'some value'
*
ERROR at line 1:
ORA-02296: cannot enable (SCOTT.) - null values found
Упс!Не будет работать, если в столбце есть NULL.Я знаю # 2, что вы не хотите изменять существующие строки, но - для этой демонстрации я сделаю это:
SQL> update test set col = 'x' where col is null;
2 rows updated.
SQL> alter table test modify col default on null 'some value';
Table altered.
OK;давайте посмотрим, как он себя ведет: я явно вставляю NULL в столбец.В предыдущем примере он не поместил туда «какое-то значение», а оставил значение NULL.Как насчет сейчас?
SQL> insert into test (id, col) values (5, null);
1 row created.
SQL> select * From test;
ID COL
---------- ----------
1 x
2 Littlefoot
3 x
4 some value
5 some value
Хорошо;у нас есть «некоторое значение» в столбце.
Теперь у вас есть больше информации о проблеме;посмотрим, поможет ли это.