Por que o Oracle adiciona uma coluna oculta aqui?
Recentemente, migramos um sistema do cliente para o Oracle 12c e para a versão mais recente do nosso produto. Esse processo inclui a execução de vários scripts de migração que geralmente incluem ou alteram tabelas. Percebemos que adicionar uma coluna a uma tabela e também fornecer um valor padrão cria uma coluna oculta adicionalSYS_NC00002$
.
Você deve conseguir reproduzir isso com o seguinte código
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 |
Quando eu preencho a tabela e observo os valores nessa coluna oculta, eles são todos iguais:
select distinct SYS_NC00002$ from xxx;
Sys_Nc00002$|
-------------
01 |
Surpreendentemente, quando eu não defino o valor padrão imediatamente, mas em uma declaração extra, nenhuma coluna oculta adicional é criada.
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 |
Alguém pode explicar para que serve esta coluna oculta e por que ela é criada apenas no primeiro exemplo, mas não no segundo?