Eu tenho um banco de dados que tem uma restrição NOT NULL em um campo e desejo remover essa restrição. O fator complicador é que essa restrição tem um nome definido pelo sistema e o nome dessa restrição difere entre o servidor de produção, o servidor de integração e os vários bancos de dados do desenvolvedor. Nosso processo atual é fazer o check-in dos scripts de alteração e uma tarefa automatizada executa as consultas apropriadas por meio do sqlplus no banco de dados de destino, então eu preferiria uma solução que pudesse ser enviada diretamente para o sqlplus.
Em meu próprio banco de dados, o SQL para eliminar isso seria:
alter table MYTABLE drop constraint SYS_C0044566
Posso ver a restrição ao consultar a all_constraints
visualização:
select * from all_constraints where table_name = 'MYTABLE'
mas não tenho certeza de como trabalhar com o SEARCH_CONDITION
's LONG
tipo de dados ou a melhor forma de eliminar de forma dinâmica a restrição olhou-up, mesmo depois de eu sei o seu nome.
Portanto, como posso criar um script de mudança que possa eliminar essa restrição com base no que ela é, em vez de em seu nome?
EDIT: @A resposta de Allan é boa, mas estou preocupado (em minha falta de experiência em Oracle) que pode não ser universalmente verdadeiro que qualquer restrição que possa ter um nome gerado pelo sistema terá associado a ele uma maneira de remover o restrição sem precisar saber seu nome. É verdade que sempre haverá uma maneira de evitar ter que saber o nome de uma restrição nomeada pelo sistema ao eliminar logicamente essa restrição?