Недавно мы перенесли клиентскую систему на Oracle 12c и на последнюю версию нашего продукта. Этот процесс включает в себя запуск нескольких сценариев миграции, которые в основном добавляют или меняют таблицы. Мы заметили, что добавление столбца в таблицу, а также предоставление значения по умолчанию, создает дополнительный скрытый столбец SYS_NC00002$
.
Вы должны иметь возможность воспроизвести это со следующим кодом
create table xxx (a integer);
alter table xxx add (b integer default 1);
select table_name, column_name, data_type, data_length, column_id, default_length, data_default from user_tab_cols where table_name='XXX';
Table_Name|column_Name |data_Type|data_Length|column_Id|default_Length|data_Default|
------------------------------------------------------------------------------------
XXX |A |NUMBER | 22| 1| | |
XXX |SYS_NC00002$|RAW | 126| | | |
XXX |B |NUMBER | 22| 2| 1|1 |
Когда я заполняю таблицу и просматриваю значения в этом скрытом столбце, они все одинаковы:
select distinct SYS_NC00002$ from xxx;
Sys_Nc00002$|
-------------
01 |
Удивительно, когда я не устанавливаю значение по умолчанию сразу, но в дополнительном выражении не создается дополнительный скрытый столбец.
create table xxy (a integer);
alter table xxy add (b integer);
alter table xxy modify b default 1;
select table_name, column_name, data_type, data_length, column_id, default_length, data_default from user_tab_cols where table_name='XXY';
Table_Name|column_Name|data_Type|data_Length|column_Id|default_Length|data_Default|
-----------------------------------------------------------------------------------
XXY |A |NUMBER | 22| 1| | |
XXY |B |NUMBER | 22| 2| 1|1 |
Может ли кто-нибудь объяснить, для чего этот скрытый столбец и почему он создан только в первом примере, но не во втором?