¿Por qué Oracle agrega una columna oculta aquí?
Recientemente migramos un sistema de cliente a Oracle 12c y a la última versión de nuestro producto. Este proceso incluye ejecutar una serie de scripts de migración que en su mayoría agregan o cambian tablas. Notamos que agregar una columna a una tabla y al mismo tiempo proporcionar un valor predeterminado crea una columna oculta adicionalSYS_NC00002$
.
Debería poder reproducir esto con el siguiente 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 |
Cuando relleno la tabla y miro los valores en esa columna oculta, son todos iguales:
select distinct SYS_NC00002$ from xxx;
Sys_Nc00002$|
-------------
01 |
Sorprendentemente, cuando no configuro el valor predeterminado de inmediato, pero en una declaración adicional, no se crea una columna oculta adicional.
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 |
¿Alguien puede explicar para qué sirve esta columna oculta y por qué solo se crea en el primer ejemplo, pero no en el segundo?