sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué esta DROP COLUMN de Oracle altera el valor predeterminado de otra columna?

Este es un error de Oracle.

Se activa al agregar una columna con NOT NULL restricción y un DEFAULT valor a una tabla existente.

Para agregar la columna rápidamente, Oracle 11g almacena el valor predeterminado en el diccionario de datos. Oracle llama a esto "añadir optimización de columna".

Esto es más rápido que escribir el valor predeterminado en cada fila de la tabla. Se supone que el motor de consultas debe reemplazar cualquier NULL en la fila de la tabla con el valor predeterminado del diccionario de datos. Desafortunadamente, hay varios errores relacionados con esto. El tuyo parece ser una instancia de:

Puede verificar qué columnas se han agregado así:

 select owner, object_name, name 
 from dba_objects, col$
 where bitand(col$.PROPERTY,1073741824)=1073741824
 and object_id=obj#;

En nuestro caso, nos picó un error diferente que devolvió resultados incorrectos para SELECT FOR UPDATE .

Establecemos el parámetro _add_col_optim_enabled=FALSE para desactivar esta "optimización". Alternativamente, puede actualizar a una versión posterior de Oracle donde se resuelvan estos errores.

Actualizar o configurar el parámetro anterior no arreglará su tabla existente, que está corrupta. Debe volver a crear esa tabla.