является статьей OTN, которая объясняет новую оптимизацию DDL более подробно.

но мы перенесли систему клиентов на 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           |

Может кто-нибудь объяснить, для чего этот скрытый столбец и почему он создается только в первом примере, а не во втором?

Ответы на вопрос(0)

Ваш ответ на вопрос