Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #95328
    Eduardo Gomes
    Participante

      Boa 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,

      #95331
      Avatar photoLeonardo Litz
      Participante

        Para isso não é possível.

        Você deve colocar algum valor nestes registros antes de mudar a coluna para not null.

        Vlw Leonardo Litz

        #95332
        burga
        Participante

          a cláusula novalidate deve resolver teu problema…

          ALTER TABLE TABELA MODIFY COLUNA NOT NULL NOVALIDATE;

          #95333
          Eduardo Gomes
          Participante

            Boa 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

            #95334
            burga
            Participante

              Ela é 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.

              #95335
              Eduardo Gomes
              Participante

                Correto.

                Foi criada uma check!!!!

                valeu mesmo!!!!!

                #95336
                burga
                Participante

                  Segue 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.

                  Fonte:
                  http://ora-01400.ora-code.com/msg/28664.html

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.