- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 7 meses atrás por
burga.
-
AutorPosts
-
30 de julho de 2010 às 6:56 pm #95328
Eduardo Gomes
ParticipanteBoa tarde,
Estou com a seguinte situação:
Tenho uma coluna em uma tabela que quando modelada foi definida que poderia receber nulo. Porém agora essa mesma coluna não poderá mais receber nulo (not null).
Como existem registros nulos não consigo alterar a definição da tabela. (lógico!).
[b]Gostaria de saber se tem algum recurso do oracle que permite fazer tal alteração, ignorando os registros atuais e só validando os registros novos.
Sei que ficará inconsistente a coluna ser not null com registros nulos (antigos), mas foi solicitado essa modificação.[/b]Por trigger provavelmente é possível, mas até mesmo a nível de curiosidade e conhecimento gostaria saber se é possível fazer como descrevi acima.
Dei uma pesquisa no fórum e não achei algo relacionado!
Grato,
30 de julho de 2010 às 7:52 pm #95331Leonardo Litz
ParticipantePara isso não é possível.
Você deve colocar algum valor nestes registros antes de mudar a coluna para not null.
Vlw Leonardo Litz
30 de julho de 2010 às 8:26 pm #95332burga
Participantea cláusula novalidate deve resolver teu problema…
ALTER TABLE TABELA MODIFY COLUNA NOT NULL NOVALIDATE;30 de julho de 2010 às 8:45 pm #95333Eduardo Gomes
ParticipanteBoa tarde Ricardo,
De fato a sua ajuda resolveu sim a situação que eu passei.
Porém ficou uma dúvida, este comando não altera a estrutura da tabela, mesmo ele validando agora o not null??
Tipo, executei a sua instrução, tentei inserir registro nulo e deu restrição. Beleza, era isso mesmo. Mas quando fui consultar a tabela, percebi que a coluna não estava not null.
E mto obrigado pela atenção e ajuda!!!!
abs
30 de julho de 2010 às 9:08 pm #95334burga
ParticipanteEla é a mesma constraint NOT NULL, só que o comando NOVALIDATE diz para o Oracle não validar registros já existentes na tabela.
Conheci a cláusula estudando bancos de clientes, mas não cheguei a reparar que ele não aparece na descrição da tabela… 😆
Mas se você procurar nas views do dicionário de dados, a constraint vai existir.
30 de julho de 2010 às 9:17 pm #95335Eduardo Gomes
ParticipanteCorreto.
Foi criada uma check!!!!
valeu mesmo!!!!!
30 de julho de 2010 às 9:35 pm #95336burga
ParticipanteSegue uma resposta:
It’s just the way DESC clause in sqlplus queries the cdef$ and ccol$ data
dictionary tables. It only shows validated not null constraints there,
probably for consistency with Oracle optimizer behaviour, which cannot take
a not validated constraint seriously when optimizing execution plans.You can still see your constraint from dba_constraints, you just see it’s
not validated from there.Tanel.
-
AutorPosts
- Você deve fazer login para responder a este tópico.