Este é um bug do Oracle.
Ele é acionado adicionando uma coluna com um
NOT NULL
restrição e um DEFAULT
valor para uma tabela existente. Para adicionar a coluna rapidamente, o Oracle 11g armazena o valor padrão no dicionário de dados. A Oracle chama isso de "adicionar otimização de coluna".
Isso é mais rápido do que escrever o valor padrão em cada linha da tabela. O mecanismo de consulta deve substituir qualquer NULL na linha da tabela pelo valor padrão do dicionário de dados. Infelizmente, existem vários bugs relacionados a isso. O seu parece ser uma instância de:
Você pode verificar quais colunas foram adicionadas assim:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
No nosso caso, fomos picados por um bug diferente que retornou os resultados incorretos para um
SELECT FOR UPDATE
. Definimos o parâmetro
_add_col_optim_enabled=FALSE
para desligar esta "otimização". Como alternativa, você pode atualizar para uma versão posterior do Oracle em que esses bugs sejam resolvidos. Atualizar ou definir o parâmetro acima não corrigirá sua tabela existente, que está corrompida. Você deve recriar essa tabela.